如何判断Control是否有Text属性

2024-01-12

当我迭代表单上的一堆不同控件时,而不是尝试访问 Text 属性:

String text = String.Empty;
foreach(Control control in this.Controls)
{
   try
   {
      text = control.Text;
   }
   catch(Exception exception)
   {
      // This control probably doesn't have the Text property.
      Debug.WriteLine(exception.Message);
   }
}

有没有办法只确定给定的控件是否has文本属性?像这样的事情:

String text = String.Empty;
foreach(Control control in this.Controls)
{
   if(control has Text property)
   {
      text = control.Text;
   }
}

我绝对鄙视 Try/Catch 块(当然,除非没有更好的选择)。


All Control对象有一个Text财产 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.text.aspx,因此使用反射来确定这一点是没有意义的。它总会回来true.

你的问题实际上是一些控件抛出异常Text财产,因为他们不支持它。

如果您还希望能够使用您事先不知道的自定义控件,则应该坚持使用当前的解决方案并捕获异常。但是,你应该抓住抛出的具体异常, 例如NotSupportedException.

如果您只遇到预先知道的控件,则可以选择您知道有效的控件Text财产。例如:

public static bool HasWorkingTextProperty(Control control)
{
    return control is Label
        || control is TextBox
        || control is ComboBox;
}

var controlsWithText = from c in this.Controls
                       where HasWorkingTextProperty(c)
                       select c;

foreach(var control in controlsWithText)
{
    string text = control.Text;
    // Do something with it.
}

如果您实现自己的自定义控件,该控件可能有也可能没有Text属性,那么您可以从指示这一点的基类派生它们:

public abstract class CustomControlBase : Control
{
    public virtual bool HasText
    {
        get { return false; }
    }
}

public class MyCustomControl : CustomControlBase
{
    public override bool HasText
    {
        get { return true; }
    }

    public override string Text
    {
        get { /* Do something. */ }
        set { /* Do something. */ }
    }
}

public static bool HasWorkingTextProperty(Control control)
{
    return (control is CustomControlBase && ((CustomControlBase)control).HasText)
        || control is Label
        || control is TextBox
        || control is ComboBox;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何判断Control是否有Text属性 的相关文章

随机推荐

  • 使用 Oslo 和 M 有什么优势?您何时会使用它?

    在参加 Oslo M 的演讲后 我很难看出使用它相对于现有方法的优势以及它在什么情况下有用 我知道它很新 并非所有细节都已发布等 但有人可以给我一些优势以及您何时可以使用它吗 Thanks Alex 这个问题似乎有您正在寻找的答案 模型驱动
  • SwiftUI:minimumScaleFactor 未均匀应用于堆栈元素

    我有两段文本的水平堆栈 第二段以蓝色突出显示 它非常适合 iPhone XR 但在较小的设备 如 iPhone X 上时 文本不适合 我尝试通过使用minimumScaleFactor来缩放文本来解决这个问题 然而 SwiftUI 似乎决定
  • 重温PHP中如何从多维数组中删除重复值

    如何从 PHP 中的多维数组中删除重复值 初始数组 array 0 gt array following userid gt 88 1 gt array following userid gt 89 2 gt array following
  • 判断一系列日期是否覆盖一个区间

    我有两个对象日历 Calendar startCalendar new GregorianCalendar 2013 0 31 Calendar endCalendar new GregorianCalendar 我想知道上面列出的两个日期
  • HTTP 处理程序与 HTTP 模块

    有人能用不到两句话解释两者之间的区别吗 是的 我知道谷歌可以提供数百个答案 但不能提供二分之一的清晰句子 HttpHandler 是请求队列的去向 HttpModule是沿途的一个站
  • CodePipeline 构建规范和多个构建操作

    一个简单的构建规范 例如 version 0 2 phases install commands cd lambda src npm install aws cloudformation package template file lamb
  • mod_rewrite 的小问题

    我有一个分类广告网站 每个分类最初都是这样链接的 mydomain com ad php ad id Bmw M3 M tech 113620829 我应该使用什么 RewriteRule 来使此链接看起来像 mydomain com Bm
  • Node js 向 Gmail 发送会议/日历邀请

    我正在尝试使用 Node js 发送日历邀请 我已经尝试过 nodemailer 库 并且正在发送带有日历邀请的邮件 就像参考this https stackoverflow com questions 45097141 nodemaile
  • ASP.NET - Unity - 从外部配置文件读取配置部分

    我想将 Unity 集成到我的应用程序中 并且希望它使用外部配置文件 Unity初始化代码是 var fileMap new ExeConfigurationFileMap ExeConfigFilename unity config Sy
  • 将本地图像添加到 IJulia 笔记本

    如何将本地图像添加到 IJulia 笔记本 该图像与 IPYNB 文件位于同一本地网络文件夹中 该文件夹可通过符号链接访问 我尝试过相对文件名和绝对文件名 img src test png alt Image Test style widt
  • PHP 中变量周围的括号有什么作用?

    我在旧平台上使用 PHP 5 3 中的 ImageMagick 我偶然发现了一段代码 当变量周围使用括号时 该代码不起作用 但当删除这些括号时 该代码却起作用 变量两边的括号有什么作用 im new imagick im gt readIm
  • 在哪里可以找到 jdk 7 中的 jnlp api jar? [复制]

    这个问题在这里已经有答案了 可能的重复 在 JDK 1 7 中找不到 jnlp jar https stackoverflow com questions 10830317 cant find jnlp jar in jdk 1 7 对于j
  • 转换具有相同名称但不同扩展名的图像

    例如 我有两个文件 aaa jpg with cat aaa png with dog 正如您所看到的 尽管名称相同 但图像是不同的 我想将这些图像转换为一种格式 这项任务的基本尝试是 mogrify format jpg png 但由于显
  • 如何捕获flask_restful应用程序中引发的所有异常

    我确实有简单的 Restful 应用程序与 Flask Restful from flask import Flask from flask restful import Api app Flask name api Api app api
  • Ncurses:如何刷新菜单而不丢失当前位置?

    如何在不丢失当前位置的情况下重新加载菜单中的数据 例如 当用户 选择 某个项目时 执行的操作会更改数据 更新项目 删除项目或向菜单添加新项目 我想重新加载菜单 但仍将光标保留在刚刚选择的项目上 最好的方法是什么 作为参考 这个问题似乎非常接
  • 如何将用户表连接到角色表(使用表user_roles)?

    我需要创建一个用于用户身份验证的基本数据库 到目前为止 每个用户都有一个名称 密码和角色 我在互联网上的某个地方找到了这个 看起来很有希望 create table if not exists users id int unsigned n
  • 使用 Windows 服务运行 UI

    我计划使用 Windows 服务 用 C 编写 运行启动 监视 UI 应用程序 选中 允许服务与桌面交互 这在 Windows XP 上工作正常 但在 Windows 7 上弹出如下所示 当我点击查看消息时 整个屏幕一片空白 只显示 UI
  • 列出所有已部署的休息端点(spring-boot、jersey)

    是否可以使用 Spring Boot 列出我配置的所有休息端点 执行器在启动时列出所有现有路径 我想要类似的自定义服务 这样我就可以在启动时检查所有路径是否配置正确 并使用此信息进行客户端调用 我该怎么做呢 我用 Path GET我的服务
  • Azure DevOps 中是否有“服务帐户用户”概念

    我正在使用自动化工作Azure 开发运营并想知道是否有一种简单的方法可以服务用户帐户即信用永不过期并且可以访问的帐户Azure 开发运营只能通过API 我想在我的自动化脚本中重复使用此用户凭据 但不希望用户可以通过 UI 登录 Azure
  • 如何判断Control是否有Text属性

    当我迭代表单上的一堆不同控件时 而不是尝试访问 Text 属性 String text String Empty foreach Control control in this Controls try text control Text