将GroupBox中的所有控件都设为只读?

时间:2013-03-24 10:19:46

标签: c# .net winforms controls groupbox

我知道很多单独的控件都有ReadOnly属性。但是假设我有一个GroupBox,其中有许多不同的控件(文本框,组合框,单选按钮等等),是否可以将所有这些控件的ReadOnly属性设置在一起?

不是我只想为特定GroupBox内的控件设置此属性(因为我也有多个GroupBox,所以我不希望对其他GroupBox中的控件进行设置)。

手动设置ReadOnly属性似乎非常昏昏欲睡,因为每个Groupbox中有多达20个控件(不要问为什么:p)。

4 个答案:

答案 0 :(得分:4)

对于Winform中的标准控件,您可以使用类似这样的内容(TextBoxBaseReadOnly属性控件的基类):

    private void button1_Click(object sender, EventArgs e)
    {
        SetReadonlyControls(groupBox1.Controls);
    }

    private void SetReadonlyControls(Control.ControlCollection controlCollection)
    {
        if (controlCollection == null)
        {
            return;
        }

        foreach (TextBoxBase c in controlCollection.OfType<TextBoxBase>())
        {
            c.ReadOnly = true;
        }
    }

答案 1 :(得分:2)

如果禁用已足够,您可以禁用组框,也可以禁用子项。

如果要将输入设置为只读,则需要迭代子项,如果它们具有IsReadOnly属性,则找出使用反射,然后设置它。

答案 2 :(得分:0)

使用Daniil的答案,因为你提到过存在ComboBoxes和RadioButtons。这段代码:

TextBoxBase c in controlCollection.OfType<TextBoxBase>() 

无法捕捉RadioButtons和ComboBoxes。您还需要添加以下foreach循环。

private void button1_Click(object sender, EventArgs e)
    {
        SetReadonlyControls(groupBox1.Controls);
    }

    private void SetReadonlyControls(Control.ControlCollection controlCollection)
    {
        if (controlCollection == null)
        {
            return;
        }
        foreach (RadioButton r in controlCollection.OfType<RadioButton>())
        {
            r.Enabled = false; //RadioButtons do not have readonly property
        }
        foreach (ComboBox c in controlCollection.OfType<ComboBox>())
        {
            c.Enabled = false;//ComboBoxes do not have readonly property
        }
        foreach (TextBoxBase c in controlCollection.OfType<TextBoxBase>())
        {
            c.ReadOnly = true;
        }
    }

编辑:

确保所有控件都在groupbox1中。

答案 3 :(得分:0)

 public void SetReadonlyControls(Control.ControlCollection controlCollection)
        {
            if (controlCollection == null)
            {
                return;
            }
            foreach (RadioButton r in controlCollection.OfType<RadioButton>())
            {
                r.Enabled = false; //RadioButtons do not have readonly property
            }
            foreach (ComboBox c in controlCollection.OfType<ComboBox>())
            {//AQUE
                var text = new TextBox();
                controlCollection.Add(text);
                text.Text = c.Text;
                text.Location = c.Location;
                text.Size = c.Size;
                text.Visible = true;`enter code here`
                c.Visible = false;
               /* c.Enabled = false;//ComboBoxes do not have readonly property
                c.ForeColor = System.Drawing.Color.White;
               c.DropDownStyle = ComboBoxStyle.Simple;*/
            }
            foreach (TextBoxBase c in controlCollection.OfType<TextBoxBase>())
            {
                c.ReadOnly = true;
            }
            foreach (DateTimePicker c in controlCollection.OfType<DateTimePicker>())
            {
                c.Enabled = false;
            }
        }