我在运行时创建了一些controls,如下所示:
pnl1.Controls.Add(New TextBox() With _
{
.Name = "ItemName", _
.Anchor = AnchorStyles.Left + AnchorStyles.Right _
}我试图将它的修饰符设置为Public。不幸的是,我所有的尝试都失败了。
我的问题是:我们可以为动态创建的控件设置修饰符吗?
如果不是,那么我如何访问其他forms中的呢?(Ex: Form1动态创建了控制ctrl1,Form2存在于MDI container of Form1中)。
如何从ctrl1访问Form2?(如果不在public中为ctrl1设置form1修饰符,我们就无法像这样从Form2中访问me.parentform.ctrl1)
发布于 2013-04-03 07:36:39
如果不是直接设置,Visual默认将控件设置为Friend With Events,在Vb.NET中,在添加到窗体之前声明这些控件。您也可以这样做,声明一个公共List(Of Control) (例如),并在创建控件时添加控件。
或者更好的是,一个Dictionary(Of String, Control)以它的名字访问控件。
或者你可以从表格上得到它们。使用Form1.Controls,您可以访问表单中的所有控件。如果您的控件位于另一个控件中,则需要到达该控件中的控件,例如:
Dim btn As Label = Ctype(Form1.Controls("GroupBox1").Controls("Label1"), Label)发布于 2013-04-03 07:37:22
您缺少访问修饰符是为了在编译时而不是在运行时描述表单的类。访问修饰符不是安全机制!
例如,将3个TextBoxes添加到表单中。给他们提供访问修饰符Private,现在创建表单的一个实例并运行以下代码:
Dim form as Form1
For Each c As Control In form.Controls
MessageBox.Show(c.Name)您将得到3个MessageBoxes,告诉您3 TextBoxes的名称,即使它们的访问修饰符是Private。与Public不同的是,您不能编写这样的代码:
MessageBox.Show(form.TextBox1.Name)您不能以这种方式访问类的私有成员。但是,成员在编译时可用。他们和全班同学一起宣布。在这种情况下,它们简化了对Control的访问。
在运行时向表单添加控件将使而不是在类中创建一个新成员!它不能,因为您的类必须被修改、重新编译、恢复,等等。
结论:
Private并不阻止对象访问它们封装的控件。https://stackoverflow.com/questions/15781105
复制相似问题