我知道许多单独的控件都有一个ReadOnly
属性。但是假设我有一个GroupBox
其中有许多不同的控件(文本框、组合框、单选按钮等),是否可以将ReadOnly
所有这些控件的属性一起设置?
并不是说我只想为特定中的控件设置此属性GroupBox
(因为我也有多个 GroupBox,所以我不希望对其他 GroupBox 中的控件进行设置)..
手动设置ReadOnly
属性似乎很无聊,因为我每个都有多达 20 个控件Groupbox
(不要问为什么:p)。
对于 Winform 中的标准控件,您可以使用类似这样的东西(TextBoxBase是ReadOnly属性控件的基类):
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;
}
}
如果禁用就足够了,您可以禁用组框,孩子也将被禁用。
如果要将输入设置为只读,则需要遍历子级,使用反射找出它们是否具有IsReadOnly
属性,然后设置它。
使用 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 内。
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;
}
}