C# 如何检查控件是否为某一类型?
当我使用下面的代码时,它是有效的。所有控件都是隐藏的C# 如何检查控件是否为某一类型?,c#,asp.net,C#,Asp.net,当我使用下面的代码时,它是有效的。所有控件都是隐藏的 foreach (Control ctr in eItem.Controls) { ctr.visible = false; } 但是,我只想隐藏标签和下拉列表。这就是为什么我试图使用下面的代码却没有成功 foreach (Control ctr in eItem.Controls) { if(ctr is Label | ctr is DropDownList) {
foreach (Control ctr in eItem.Controls)
{
ctr.visible = false;
}
但是,我只想隐藏标签和下拉列表。这就是为什么我试图使用下面的代码却没有成功
foreach (Control ctr in eItem.Controls)
{
if(ctr is Label | ctr is DropDownList)
{
ctr.visible = false;
}
}
编辑
这里是整个方法
private void HideLabelAndDDLOnPageLoad()
{
foreach (ListViewItem eItem in lsvTSEntry.Items)
{
foreach (Control ctr in eItem.Controls)
{
if (ctr is Label || ctr is DropDownList)
{
ctr.Visible = false;
}
}
}
}
当我删除if时,所有控件都被隐藏。当我把它放回去时,什么也没发生
感谢您的帮助我想您想要的是
|
将其更改为|
…这是逻辑or运算符
foreach (Control ctr in eItem.Controls)
{
if(ctr is Label || ctr is DropDownList)
{
ctr.Visible = false;
}
}
if(ctr is Label || ctr is DropDownList)
|
=按位运算符
|
=逻辑或运算符
根据您的编辑
如果要循环updatepanel的内容模板容器中的所有控件,则控件似乎位于updatepanel
中
给你:
foreach (Control ctr in UpdatePanel1.ContentTemplateContainer.Controls)
{
// rest of code
if(ctr is Label || ctr is DropDownList)
{
ctr.Visible = false;
}
}
如果没有精确的标记,我们只能猜测解决方案 您必须使用另一个容器将控件包装在ListView中的ItemTemplate中,类似于面板或其他容器。当您获得列表视图项上的控件时,实际上得到的是扭曲容器,而不是它的子对象(标签、下拉列表等) 解决这个问题的一个办法是:
foreach (ListViewItem item in lsvTSEntry.Items)
{
item.FindControl("myLabel").Visible = false;
item.FindControl("myDropdownList").Visible = false;
}
基本上,您尝试按id查找控件并隐藏它们。请注意,这里没有错误检查,因此如果FindControl返回null,您可能会得到一个NullReferenceException
如果ItemTemplate中有嵌套容器,并且希望隐藏所有标签和下拉列表,而不管它们在何处,则可以实现自己的递归FindControl,如下所示:
private Control FindControlRecursive(Control rootControl, string controlId)
{
if (rootControl.ID == controlId)
{
return rootControl;
}
foreach (Control controlToSearch in rootControl.Controls)
{
Control controlToReturn = FindControlRecursive(controlToSearch, controlId);
if (controlToReturn != null)
{
return controlToReturn;
}
}
return null;
}
不是最优雅的,但是。。。。当然,为了提高速度,您可以将其更改为获取一个Id数组。
当然,基于此,您可以实现按控件类型搜索,而不是将controlId作为参数,而是按要查找的控件类型进行搜索 是按位or运算符。 您正在寻找| |,逻辑or运算符
foreach (Control ctr in eItem.Controls)
{
if(ctr is Label || ctr is DropDownList)
{
ctr.Visible = false;
}
}
if(ctr is Label || ctr is DropDownList)
你说的“没有成功”是什么意思?发生了什么,你想发生什么?你为什么用|而不是| |?(你不必使用| |,但它更惯用。)@Richard…你收到错误消息了吗?请发布错误我已将|更改为| |,没有错误,但我要禁用的所有控件仍在那里。@Richard77:如果没有错误,那么发布的代码就不是正在运行的代码-应该是编译时错误。请发布您的真实代码。您能显示
列表视图
控件的标记吗?不,|
可以。它不会短路,但会起作用。我投了反对票——这绝对不是问题所在。它不是惯用的,但它是有效的代码,将给出完全相同的结果。@JonSkeet-fair结果是相同的,但您必须查看它,以确定对正在执行的操作使用什么运算符。这里的逻辑运算符是有意义的,您的下一票倾向于不同意这一点,这绝对不值得下一票,因为不,我在哪里提到使用|
是错误的,我建议使用什么。你太挑剔了。@john:你的回答有助于OP解决他们的问题吗?绝对不是——但这意味着确实如此。如果你说:“这不会有任何效果,但是你应该用|
而不是|
来表达你的习惯用语”,那么那将是另一回事——尽管那将是一个注释而不是答案。@john:是的,这更像是一个问题。绝对不是问题。看我的答案。@JonSkeet,这不值得投反对票+1 Marty,运算符的可读性和正确使用更像它。@john:|
的使用是正确的-它是有效的代码,结果是一样的。我不相信这个答案(或其他类似的答案)有助于OP解决他们的问题。对于代码样式的注释,如果实际上没有解决问题,则最好作为注释。