无法在winforms控件中找到新的子类属性

时间:2011-12-16 11:07:40

标签: c# winforms textbox

感谢这里的帮助,我设法递归循环遍历winform上的所有控件并找到我的子类控件但是当我尝试更新我的用户定义属性_key和_value时,对象ctrl不会暴露它们:( 我正在使用 下面的ctrlContainer是作为此

传递的调用表单
foreach (Control ctrl in ctrlContainer.Controls)
{
    // code to find my specific sub classed textBox
    // found my control
    // now update my new property _key
    ctrl._key does not exist :(

    I know the ctrl exists and is valid because ctrl.Text = "I've just added this text" works.
    _key is visible when looking at the control in the form designer.
}

任何人都可以给我一个关于我做错的提示吗? 感谢。

2 个答案:

答案 0 :(得分:4)

_key不存在,因为您正在查看Control

尝试做:

foreach (var ctrl in ctrlContainer.Controls.OfType<MyControl>())
{
     ctrl._key = "somthing";
}

答案 1 :(得分:3)

这是因为您的引用属于Controlforeach (Control ctrl)类型,我假设它不是您的子类控件。该引用只会理解属于它的成员,_key可能属于派生类。试试这个:

foreach (Control ctrl in ctrlContainer.Controls)
{
    // code to find my specific sub classed textBox
    // found my control
    // now update my new property _key
    if (ctrl is MyControl)
    {
        MyControl myControl = (MyControl)ctrl;
        myControl._key = "";
    }
}

或者您可以更改迭代器以仅查找控件的实例,如Sebastian所建议的那样。这将是更清晰的代码。