2

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

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

手动设置ReadOnly属性似乎很无聊,因为我每个都有多达 20 个控件Groupbox(不要问为什么:p)。

4

4 回答 4

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;
        }
    }
于 2013-03-24T13:44:34.397 回答
2

如果禁用就足够了,您可以禁用组框,孩子也将被禁用。

如果要将输入设置为只读,则需要遍历子级,使用反射找出它们是否具有IsReadOnly属性,然后设置它。

于 2013-03-24T10:24:15.400 回答
1

使用 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 内。

于 2016-05-12T16:03:29.063 回答
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;
            }
        }
于 2018-06-13T19:22:26.380 回答