C# &引用;无法投射对象“;在程序创建的文本框中循环时

C# &引用;无法投射对象“;在程序创建的文本框中循环时,c#,asp.net,.net,c#-4.0,C#,Asp.net,.net,C# 4.0,我有一些动态创建的文本框-- 谢谢 您的面板中有一个控件,该控件不是文本框,无法对其进行强制转换。您应该在循环之前放置一个断点,并在调试模式下检查面板.Control集合内容 如果不在foreach循环中指定类型并自己执行安全强制转换,则可以避免该问题 foreach (var t in panel.Controls) { var textbox = t as System.Web.UI.WebControls.TextBox; if(textbox != null)

我有一些动态创建的文本框--


谢谢

您的
面板中有一个控件
,该控件不是
文本框
,无法对其进行强制转换。您应该在循环之前放置一个断点,并在调试模式下检查
面板.Control
集合内容

如果不在
foreach
循环中指定类型并自己执行安全强制转换,则可以避免该问题

foreach (var t in panel.Controls)
{
    var textbox = t as System.Web.UI.WebControls.TextBox;
    if(textbox != null)
    {               
        textbox.Enabled = true;
    }
}

您的
面板中有一个控件
,该控件不是
文本框
,无法对其强制转换。您应该在循环之前放置一个断点,并在调试模式下检查
面板.Control
集合内容

如果不在
foreach
循环中指定类型并自己执行安全强制转换,则可以避免该问题

foreach (var t in panel.Controls)
{
    var textbox = t as System.Web.UI.WebControls.TextBox;
    if(textbox != null)
    {               
        textbox.Enabled = true;
    }
}

您应该检查控件是否为文本框

public void EditPanel(System.Web.UI.WebControls.Panel panel)
{
    foreach (var t in panel.Controls)
    {
        if (t is System.Web.UI.WebControls.TextBox)
            ((System.Web.UI.WebControls.TextBox)t).Enabled = true;
    }
}

您应该检查控件是否为文本框

public void EditPanel(System.Web.UI.WebControls.Panel panel)
{
    foreach (var t in panel.Controls)
    {
        if (t is System.Web.UI.WebControls.TextBox)
            ((System.Web.UI.WebControls.TextBox)t).Enabled = true;
    }
}

将文本框添加到div元素,将div元素添加到面板。因此,您需要选择面板中的控件,然后找到文本框

foreach (var t in panel.Controls.Cast<Control>().SelectMany(c => c.Controls))
{
    if (t is TextBox == false) continue;

    ((TextBox)t).Enabled = true;
}
public void EditPanel(System.Web.UI.WebControls.Panel panel)
{
    foreach (var control t in panel.Controls)
    {
        System.Web.UI.WebControls.TextBox textBox = control as System.Web.UI.WebControls.TextBox;
        if (textBox != null)
        {
            control.Enabled = true;
        }    
    }
}
foreach(panel.Controls.Cast()中的var t.SelectMany(c=>c.Controls))
{
如果(t是TextBox==false)继续;
((文本框)t).Enabled=true;
}

将文本框添加到div元素,将div元素添加到面板。因此,您需要选择面板中的控件,然后找到文本框

foreach (var t in panel.Controls.Cast<Control>().SelectMany(c => c.Controls))
{
    if (t is TextBox == false) continue;

    ((TextBox)t).Enabled = true;
}
public void EditPanel(System.Web.UI.WebControls.Panel panel)
{
    foreach (var control t in panel.Controls)
    {
        System.Web.UI.WebControls.TextBox textBox = control as System.Web.UI.WebControls.TextBox;
        if (textBox != null)
        {
            control.Enabled = true;
        }    
    }
}
foreach(panel.Controls.Cast()中的var t.SelectMany(c=>c.Controls))
{
如果(t是TextBox==false)继续;
((文本框)t).Enabled=true;
}

您在
面板上循环。控件将在面板中的每个控件上循环。这不一定与在您添加的所有内容上循环相同。如果你开始的时候面板里还有其他东西,你最终也会得到它

你可能想要的是:

foreach (var t in panel.Controls.OfType<System.Web.UI.WebControls.TextBox>())
{
    t.Enabled = true;
}
foreach(panel.Controls.OfType()中的var t)
{
t、 启用=真;
}

您在
面板上循环。控件将在面板中的每个控件上循环。这不一定与在您添加的所有内容上循环相同。如果你开始的时候面板里还有其他东西,你最终也会得到它

你可能想要的是:

foreach (var t in panel.Controls.OfType<System.Web.UI.WebControls.TextBox>())
{
    t.Enabled = true;
}
foreach(panel.Controls.OfType()中的var t)
{
t、 启用=真;
}

控件集合将包含面板中所有控件的集合,而不仅仅是文本框。您可以遍历所有控件,并使用
as
操作符执行类型转换。如果类型转换成功,则可以启用文本框

foreach (var t in panel.Controls.Cast<Control>().SelectMany(c => c.Controls))
{
    if (t is TextBox == false) continue;

    ((TextBox)t).Enabled = true;
}
public void EditPanel(System.Web.UI.WebControls.Panel panel)
{
    foreach (var control t in panel.Controls)
    {
        System.Web.UI.WebControls.TextBox textBox = control as System.Web.UI.WebControls.TextBox;
        if (textBox != null)
        {
            control.Enabled = true;
        }    
    }
}

控件
集合将包含面板中所有控件的集合,而不仅仅是文本框。您可以遍历所有控件,并使用
as
操作符执行类型转换。如果类型转换成功,则可以启用文本框

foreach (var t in panel.Controls.Cast<Control>().SelectMany(c => c.Controls))
{
    if (t is TextBox == false) continue;

    ((TextBox)t).Enabled = true;
}
public void EditPanel(System.Web.UI.WebControls.Panel panel)
{
    foreach (var control t in panel.Controls)
    {
        System.Web.UI.WebControls.TextBox textBox = control as System.Web.UI.WebControls.TextBox;
        if (textBox != null)
        {
            control.Enabled = true;
        }    
    }
}

您将每个文本框放在一个“div”控件中,该控件是
HtmlGenericControl
,然后放在面板控件中。因此,首先必须搜索
HtmlGenericControl
内部
panelId.Controls

可能有助于您的示例代码:

public void EditPanel(System.Web.UI.WebControls.Panel panel)
{
    foreach (Control c in panelId.Controls)
            {
                if (c is HtmlGenericControl)
                {
                    foreach (var textbox in c.Controls.OfType<TextBox>()) //ofType returns IEnumerable<TextBox>
                        textbox.Enabled = true;
                }
            }
} 
public void编辑面板(System.Web.UI.WebControls.Panel)
{
foreach(panelId.Controls中的控件c)
{
if(c是HtmlGenericControl)
{
foreach(c.Controls.OfType()中的var textbox)//OfType返回IEnumerable
textbox.Enabled=true;
}
}
} 

您将每个文本框放在一个“div”控件中,该控件是
HtmlGenericControl
,然后放在面板控件中。因此,首先必须搜索
HtmlGenericControl
内部
panelId.Controls

可能有助于您的示例代码:

public void EditPanel(System.Web.UI.WebControls.Panel panel)
{
    foreach (Control c in panelId.Controls)
            {
                if (c is HtmlGenericControl)
                {
                    foreach (var textbox in c.Controls.OfType<TextBox>()) //ofType returns IEnumerable<TextBox>
                        textbox.Enabled = true;
                }
            }
} 
public void编辑面板(System.Web.UI.WebControls.Panel)
{
foreach(panelId.Controls中的控件c)
{
if(c是HtmlGenericControl)
{
foreach(c.Controls.OfType()中的var textbox)//OfType返回IEnumerable
textbox.Enabled=true;
}
}
} 

这意味着在您的panel.Controls中有一个控件不是文本框。这意味着在panel.Controls中有一个控件不是文本框。这是为您编译的吗?当我在我的犹太区测试项目中尝试它时,我发现
System.Web.UI.ControlCollection'不包含'SelectMany'的定义,并且找不到接受'System.Web.UI.ControlCollection'类型的第一个参数的扩展方法'SelectMany'(您是否缺少using指令或程序集引用?)
完全有可能是我把什么东西顶起来了。@YYY你有系统.Linq引用吗?@frinkenstein789当然有!这就是我在自己的答案中使用
of type
方法的原因。属性是
ControlsCollection
类型,它只有
of type
Cast
AsParallel
AsQueryable
方法实现,因为它没有实现
IEnumerable
接口,只有较旧的
IEnumerable
为您编译了此文件?当我在我的犹太区测试项目中尝试它时,我发现
System.Web.UI.ControlCollection'不包含'SelectMany'的定义,并且找不到接受'System.Web.UI.ControlCollection'类型的第一个参数的扩展方法'SelectMany'(您是否缺少using指令或程序集引用?)
完全有可能是我把什么东西顶起来了。@YYY你有系统.Linq引用吗?@frinkenstein789当然有!这就是我如何在自己的答案中使用OfType的
方法的原因。属性是
controlscolection
类型,它只有OfType的