2014-11-03 47 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()你想调用一个事件处理程序,所以你可以用新名称做一些事情。