C# 从Windows窗体中查找输入类型控件

C# 从Windows窗体中查找输入类型控件,c#,winforms,C#,Winforms,我有一个窗口应用程序和一个带有一些输入控件(TextBox,ComboBox)和其他控件(如PictureBox、Label)的弹出对话框(表单)。我的表单有两种模式1)添加或编辑模式2)查看模式。在查看模式下,用户只能查看详细信息,还可以复制输入值(例如,用户可以复制TextBoxvalue) 如果表单模式为View,则我希望将表单的所有输入控件的只读属性设置为true,并使用我表单的逐个迭代控件(对每个控件使用)。但我不知道如何知道特定控件是输入类型控件System.Windows.Form

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

如果表单模式为View,则我希望将表单的所有输入控件的只读属性设置为true,并使用我表单的逐个迭代控件(对每个控件使用
)。但我不知道如何知道特定控件是输入类型控件
System.Windows.Forms.Control
没有只读属性。我发现我可以使用Enable属性来解决问题,但问题是如果
Enable
设置为false,则用户无法从
TextBox
复制文本值

有人能帮我吗?我怎样才能知道某个控件是输入型控件


谢谢。

System.Windows.forms.clipboard.clear();
尝试此操作。

此代码可能会帮助您:

foreach(Control ctl in form.Controls)
{
  if (ctl is TextBox)
  {    }
  if (ctl is CheckBox)
  {    }
  if (ctl is ComboBox)
  {    }
  /* etc */
}

我认为
TextBoxBase
可能是
输入类型控件

foreach (TextBoxBase txt in this.Controls.OfType<TextBoxBase>())
{
    txt.ReadOnly = true;
}
foreach(this.Controls.OfType()中的TextBoxBase txt)
{
txt.ReadOnly=true;
}

我通常循环检查表单上的所有控件,然后按类型对每个控件进行评估。一开始需要做一点工作,但一旦到位,您就可以添加更多控件,而无需担心单独设置它们

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();
}

输入类型控制是什么意思?复选框是否为输入类型控件?我只看到“脏”的解决方案:A)将一个类型的数组作为输入控件B来检查)检查控件是否有‘`<代码>值>代码>属性。窗体。控件没有只读属性。这是一个更高级别的TrimBox XCaseCasyes上的属性。复选框是一种输入类型控件。我也在考虑使用输入控件类型的数组,但正在寻找更好的解决方案。我能想到你的第二个解决方案。让我查一查。