我有Window Application并有一个弹出对话框(Form),其中包含一些输入控件(TextBox
,ComboBox
)和其他控件,如PictureBox,Label。我的表单有两个模式1)添加或编辑模式2)查看模式。在查看模式下,用户只能查看详细信息,还可以复制输入值(例如,用户可以复制TextBox
值)。
如果表单模式是View,那么我想为表格的所有输入控件设置read only属性为true,Iterate逐个控制我的Forma(使用for each
)。但我不知道如何知道特定控件是输入类型控件。 System.Windows.Forms.Control
没有ReadOnly属性。我发现我可以为我的解决方案使用Enable属性,但问题是如果TextBox
设置为false,则用户无法从Enable
复制文本值。
任何人都可以帮助我如何知道特定控件是输入类型控件。
感谢。
答案 0 :(得分:1)
System.Windows.forms.clipboard.clear(); 试试这个。
答案 1 :(得分:0)
此代码可以帮助您:
foreach(Control ctl in form.Controls)
{
if (ctl is TextBox)
{ }
if (ctl is CheckBox)
{ }
if (ctl is ComboBox)
{ }
/* etc */
}
答案 2 :(得分:0)
我认为TextBoxBase
可以是input type Control
:
foreach (TextBoxBase txt in this.Controls.OfType<TextBoxBase>())
{
txt.ReadOnly = true;
}
答案 3 :(得分:0)
我通常循环浏览表单上的所有控件,然后按类型评估每个控件。一点点工作开始,但一旦到位,您可以添加更多控件,而无需担心单独设置它们。
foreach (Control c in formMain.Controls)
{
if(c.GetType()==typeof(ComboBox))
{
ComboBox cb = (ComboBox) c;
//do something
}
else if(c.GetType()==typeof(TextBox))
{
TextBox t = (TextBox) c;
t.ReadOnly = true;
}
}
我也使用相同的过程来设置通用事件处理程序,例如将控制值保存到文本更改的设置。因此,如果您创建与控件同名的设置,则可以在事件处理程序中添加类似的内容...
private void TextBoxTextchanged(object sender, EventArgs e)
{
TextBox t = (TextBox) sender;
Settings.Default[t.Name] = t.Text;
Settings.Default.Save();
}