0

我有窗口应用程序,并有一个弹出对话框(窗体),其中包含一些输入控件(TextBoxComboBox)和其他控件,如 PictureBox、Label。我的表单有两种模式 1)添加或编辑模式 2)查看模式。在查看模式下,用户只能查看详细信息,也可以复制输入值(例如,用户可以复制TextBox值)。

如果表单模式是查看,那么我想将表单的所有输入控件的只读属性设置为 true,并使用我的 Forma(使用for each)的逐个迭代控件。但我不知道如何知道特定控件是输入类型控件。System.Windows.Forms.Control没有 ReadOnly 属性。TextBox我发现我可以为我的解决方案使用 Enable 属性,但问题是如果Enable设置为 false ,用户无法复制文本值。

任何人都可以帮助我我怎么知道特定控件是输入类型控件。

谢谢。

4

4 回答 4

1

System.Windows.forms.clipboard.clear(); 尝试这个。

于 2012-09-26T11:50:40.513 回答
0

我认为TextBoxBase可能是input type Control

foreach (TextBoxBase txt in this.Controls.OfType<TextBoxBase>())
{
    txt.ReadOnly = true;
}
于 2012-09-26T11:58:40.200 回答
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();
}
于 2012-09-26T12:08:27.623 回答
0

此代码可以帮助您:

foreach(Control ctl in form.Controls)
{
  if (ctl is TextBox)
  {    }
  if (ctl is CheckBox)
  {    }
  if (ctl is ComboBox)
  {    }
  /* etc */
}
于 2012-09-26T11:54:43.377 回答