我知道很多单独的控件都有ReadOnly
属性。但是假设我有一个GroupBox
,其中有许多不同的控件(文本框,组合框,单选按钮等等),是否可以将所有这些控件的ReadOnly
属性设置在一起?
不是我只想为特定GroupBox
内的控件设置此属性(因为我也有多个GroupBox,所以我不希望对其他GroupBox中的控件进行设置)。
手动设置ReadOnly
属性似乎非常昏昏欲睡,因为每个Groupbox
中有多达20个控件(不要问为什么:p)。
答案 0 :(得分:4)
对于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;
}
}
答案 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;
}
}