检查控件类型

Posted

技术标签:

【中文标题】检查控件类型【英文标题】:Checking for the control type 【发布时间】:2012-07-12 15:13:16 【问题描述】:

我能够获取页面所有控件的 ID 以及它们的类型,当我打印它时在页面中显示

myPhoneExtTxt Type:System.Web.UI.htmlControls.HtmlInputText

这是根据这段代码生成的

    foreach (Control c in page)
    
        if (c.ID != null)
        
            controlList.Add(c.ID +" Type:"+ c.GetType());
        
    

但是现在我需要检查它的类型并访问其中的文本,如果它的类型是 HtmlInput 并且我不太确定该怎么做。

喜欢

if(c.GetType() == (some htmlInput))

   some htmlInput.Text = "This should be the new text";

我该怎么做,我想你明白了吗?

【问题讨论】:

【参考方案1】:

如果我得到你的要求,这应该就是你所需要的:

if (c is TextBox)

  ((TextBox)c).Text = "This should be the new text";

如果您的主要目标只是设置一些文本:

if (c is ITextControl)

   ((ITextControl)c).Text = "This should be the new text";

为了也支持隐藏字段:

string someTextToSet = "this should be the new text";
if (c is ITextControl)

   ((ITextControl)c).Text = someTextToSet;

else if (c is HtmlInputControl)

   ((HtmlInputControl)c).Value = someTextToSet;

else if (c is HiddenField)

   ((HiddenField)c).Value = someTextToSet;

额外的控件/界面必须添加到逻辑中。

【讨论】:

是否包括输入类型为隐藏? 不幸的是,没有。 HiddenFields 是令人讨厌的小混蛋,因为它们不会从任何有用的东西中继承,必须直接加以说明。我已经编辑了我的答案以包括支持。 还可以考虑在这些类型检查中使用as 运算符。 @JeppeStigNielsen 我很好奇在测试如何执行单行转换与 N 次可能转换时,您将如何实现它?你会事先简单定义 N 个持有者,然后尝试为每个持有者分配并检查 null 吗? 如果我们需要像这里这样的类型的优先级列表,它本身当然是一种代码味道。但我同意将aselse-if 链一起使用可能很困难。您可以将其分解为一个方法并使用return 而不是else。例如:var textControl = c as ITextControl; if (textControl != null) textControl.Text = x; return; var htmlInputControl = c as HtmlInputControl; if (htmlInputControl != null) htmlInputControl.Value = x; return;

以上是关于检查控件类型的主要内容,如果未能解决你的问题,请参考以下文章

Delphi控件继承类

功能类控件

WPF - 8.控件类

WPF DataGrid在同一列中的不同控件 - 不正确的绑定

我想更改表单控件类类型的日期格式是日期?

类型安全控件。调用C#