【发布时间】:2011-12-10 16:18:43
【问题描述】:
我想在不知道其类型的情况下将通用控件存储在变量中。通过我需要访问一些常见属性,例如名称、大小、位置...我只想存储单选按钮、标签、图片框...谁能告诉我如何做到这一点?
【问题讨论】:
-
想办法设置 Control 的属性。
我想在不知道其类型的情况下将通用控件存储在变量中。通过我需要访问一些常见属性,例如名称、大小、位置...我只想存储单选按钮、标签、图片框...谁能告诉我如何做到这一点?
【问题讨论】:
是的,您可以使用List<Control> myControls = new List<Control>();
而 Control 是每个 WinForm Control 的基类,您可以访问 Name 等属性。
myControls.add(pictureBox1);
myControls.add(textBox1);
您也可以通过执行将 Cast 向后退到 Control
if(myControls[0] is TextBox)
TextBox txtbx1 = (TextBox)(myControls[0]);
【讨论】:
如果你说的是 Winform,它们都是从 Control 派生的,所以只需像这样制作一个 Control 列表:
public List<Control> MyControls;
【讨论】:
控件继承自base class Control,它具有您提到的所有属性。您可以键入控件集合以包含 Control。
【讨论】:
将变量声明为所有控件继承自的类型列表,我相信它是Control。然后,您可以访问由 Control 类声明的所有成员(包括属性)。
var MyControls = new List<Control>();
MyControls.Add(MyPicBox);
MyControls.Add(MyRadioButton);
【讨论】:
你可以这样做:
List<Control> myControls = new List<Control>();
myControls.Add(new Label());
myControls.Add(new Button());
myControls.Add(new PictureBox());
foreach (var myControl in myControls)
{
myControl.Name = "New Name";
myControl.Size = new Size(100, 200);
myControl.Location = new Point(100, 100);
}
【讨论】:
声明一个基类类型的变量。作为基类类型变量可以保存子类的实例。
例如在 WPF 中你可以做List<System.Windows.Controls.Control>
对于 Win Forms,您可以使用 List<System.Windows.Forms.Control>
【讨论】: