形式的Foreach控制

时间:2014-03-19 13:06:59

标签: c# winforms devexpress

我的表单中有很多SimpleButton(DevExpress控件)。我想通过代码将AllowFocus设置为false

foreach (Control x in this.Controls)
{
    if (x is SimpleButton)
    {
        ((SimpleButton)x).AllowFocus = false;
    }
}

使用此代码时,没有任何事情发生。它仍然允许焦点。

5 个答案:

答案 0 :(得分:3)

从你的评论中可以看出,SImpleButton对象不是直接在Form上,所以迭代Form的Controls集合不会返回那些。

您需要迭代GroupControl的Controls集合。

干杯

答案 1 :(得分:1)

解决:

 foreach (Control x in groupControl1.Controls)
        {
            if (x is SimpleButton)
            {
                ((SimpleButton)x).AllowFocus = false;
            }
        }

答案 2 :(得分:0)

以这种方式尝试:

var buttons = this.Controls.OfType<Control>()
    .SelectMany(x => x.Controls.OfType<SimpleButton>());

foreach(var button in buttons)
      button.AllowFocus = false;

答案 3 :(得分:0)

我建议更好地使用Re-cursive功能,我通常将所有控件放在主容器面板中,你只需要将该容器传递给Function,其余的功能将为你做。

private void FocusControls(Control ctl)
        {
             if ((ctl.GetType() == typeof(GroupBox)) ||
                    (ctl.GetType() == typeof(DevExpress.XtraEditors.GroupControl)) ||
                    (ctl.GetType() == typeof(DevExpress.XtraEditors.PanelControl)) ||
                    (ctl.GetType() == typeof(DevExpress.XtraTab.XtraTabControl)) ||
                    (ctl.GetType() == typeof(DevExpress.XtraTab.XtraTabPage))
                    )
                {                    
                    foreach (Control obj in ctl.Controls)
                        FocusControls(obj);
                }
                 if (ctl.GetType() == typeof(SimpleButton))
                    {
                        SimpleButton objTemp = (SimpleButton)ctl;   
                        objTemp.AllowFocus = false;
                    }
        }

答案 4 :(得分:-3)

可能只是检查类型的情况: if(typeof(x)== typeof(SimpleButton))