使用ASP.NET应用程序,我的项目需要从页面中找到控件,使用下面的语法从页面中查找控件:
public static Control FindControlRecursive(Control Root, string Id)
{
Control FoundCtl = new Control();
if (Root.ID == Id)
return Root;
foreach (Control Ctl in Root.Controls)
{
if (FoundCtl != null && FoundCtl.ID == Id)
{
Type ty = FoundCtl.GetType();
var r = FoundCtl as ty;
//var r = FoundCtl as Telerik.Web.UI.RadComboBox;
}
FoundCtl = FindControlRecursive(Ctl, Id);
//if (FoundCtl != null)
// return FoundCtl;
}
return FoundCtl;
}
用于从控件中检索控件的值需要强制转换。 对于演员使用贝尔语法
FoundCtl as TextBox;
是否可以将查找控件强制转换为
Type ty = FoundCtl.GetType();
var r = FoundCtl as ty;
如果有任何疑问,请先询问,谢谢
答案 0 :(得分:1)
最合适的方法如下:
TextBox textBox = FindControl("name") as TextBox;
if (textBox != null)
{
// use it
}
为什么它对你不起作用?
您还可以使用扩展方法以递归方式查找给定类型的控件:
public static IEnumerable<Control> GetChildControls(this Control control)
{
var children = (control.Controls != null) ? control.Controls.OfType<Control>() : Enumerable.Empty<Control>();
return children.SelectMany(c => GetChildControls(c)).Concat(children);
}
用法:
var textBoxex = this.GetChildControls<TextBox>();
答案 1 :(得分:0)
你不能这样做。所有强制转换操作符都不适用于System.Type类型的变量。此外,如果您希望在运行时使用反射使用此控件,则可以使用反射方法来处理它(例如PropertyInfo.SetValue
等)。
但通常你会大肆知道具体控制的类型。你为什么要在运行时强制转换?