2014-11-03 46 views
1

我的代碼需要在用戶控件中獲取控件名稱Load事件,問題是我在程序集中獲取控件名稱,而不是我在表單中分配的名稱,但是如果我運行項目我正確地得到控制名稱。無法在設計模式下獲取UserControl名稱

要測試,只需添加以下代碼以任何用戶控制

Private Sub GridX_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    MsgBox(Me.Name) 
End Sub 

在運行時,這給ControlName1

在設計時,這給ControlName

我怎麼能得到ControlNameX在運行時?


爲了使它更清楚,在表單中添加兩個控件,你會看到在設計模式控制的那名是一樣的..不像在運行模式..

+0

我運行代碼以獲取Me.Name值,並顯示我的表單的名稱。但是,您可能正在查找表格邊框上的文字,即Me.Text。 – Kat 2014-11-03 13:43:52

+1

您是否將control.Name與對象引用(即代碼中使用的變量名稱)混淆? – Plutonix 2014-11-03 13:50:52

+1

我看到和哈桑一樣的行爲。 @sparkysword:可能你已經實現了表單的Load事件;您需要實現用戶控件的Load事件。在我有機會指定名稱之前,控件的名稱(在設計器中)顯示出來。我認爲這是不可能的。 – Sjips 2014-11-03 13:54:32

回答

0

如果添加屬性爲您的用戶控制像這樣:

// Note: code in C# 
public string ControlName 
{ 
    get 
    { 
     return Name; 
    } 
    set 
    { 
     Name = value; 
     MessageBox.Show(value); 
    } 
} 

你編譯它,你把它添加到窗體,你有你的設計師一ControlName屬性。如果您在設計師中更改名稱,則會顯示新名稱。而不是MessageBox.Show()你想調用一個事件處理程序,所以你可以用新名稱做一些事情。