c#如何引用动态创建的组件?

时间:2010-08-05 15:23:58

标签: c# object

我有一些代码可以通过点击按钮创建一些组件。这样的事情。

CheckBox chk = new CheckBox();
chk.Top = 50;
chk.Left = 50;
chk.Text = "Check Box Test";
chk.Name = "chkTest"
this.Controls.Add(chk);

那我该如何使用这个组件呢?例如,我试过这个,但得到了错误,说该组件不存在。我只是想得到他们的价值观。

if(chkTest.Checked)
{
//Do this
}

请帮忙。

先谢谢。

5 个答案:

答案 0 :(得分:3)

在类中创建一个名为chkTest的成员变量,稍后可以使用,或者在需要时从Controls集合中动态检索它,如下所示:

CheckBox chkTest = (CheckBox)Controls["chkTest"];
if(chkTest.Checked) {
    // ...
}

答案 1 :(得分:1)

如果您在选中或取消选中时只关心控件,请使用事件。

chk.Checked += new RoutedEventHandler(CheckBox_Checked);
chk.Unchecked += new RoutedEventHandler(CheckBox_Checked);

private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
    CheckBox chkBox = sender as CheckBox;
    if (chkBox.IsChecked.Value)
    {
        // Do this...
    }
}

确保在完成事件处理程序后取消订阅。

答案 2 :(得分:0)

您正在引用chkTest但是您创建了chk。

答案 3 :(得分:0)

您可以将Checkbox声明为页面的成员变量。然后你就可以更容易地访问它了。

类MyPage {    CheckBox chkTest;

//然后在页面加载    // chkTest = new CheckBox(); ...

}

答案 4 :(得分:0)

if ((Controls.Items["chkTest"] as CheckBox).Checked)
{
// Do this
}

应该有效,但看起来并不漂亮。 :)

您可以将其声明为变量,然后像使用它一样使用它:

CheckBox chkTest = Controls.Items["chkTest"] as Checkbox;
if (chkTest.Checked)
{
// Do this
}

在这个方便的页面上查看操作和访问Control的项目集合的方法: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.controlcollection_members.aspx