C# 删除控制组中的所有图像

C# 删除控制组中的所有图像,c#,button,foreach,controls,C#,Button,Foreach,Controls,应用此代码时,我没有获得选项.Image: foreach(Control b in _SelectionPanel.Controls) { if (b is Button) { b.Image = null; } } 但是,我可以获得“可见”选项: foreach(Control b in _SelectionPanel.Controls) { if (b is Button) { b.Visible = false;

应用此代码时,我没有获得选项
.Image

foreach(Control b in _SelectionPanel.Controls)
{
    if (b is Button)
    {
       b.Image = null;
    }
}
但是,我可以获得“可见”选项:

foreach(Control b in _SelectionPanel.Controls)
{
    if (b is Button)
    {
       b.Visible = false;
    } 
}

我正在尝试删除控制组中按钮的所有图像。有什么想法吗?

is
仅检查类型是否为按钮

您希望使用
as
执行实际的强制转换,从而允许您访问按钮的属性。如果强制转换无效,您只需获得一个
null
引用,因此只需执行
as
强制转换,然后在使用它之前检查变量是否为null

foreach(Control b in _SelectionPanel.Controls)
{
    Button castB = b as Button;
    if (castB != null)
    {
        castB.Image = null;
    } 
}

is
仅检查类型是否为按钮

您希望使用
as
执行实际的强制转换,从而允许您访问按钮的属性。如果强制转换无效,您只需获得一个
null
引用,因此只需执行
as
强制转换,然后在使用它之前检查变量是否为null

foreach(Control b in _SelectionPanel.Controls)
{
    Button castB = b as Button;
    if (castB != null)
    {
        castB.Image = null;
    } 
}

在循环的上下文中,
b
是一个控件。即使在检查之后。要获取图像属性,需要将其强制转换为按钮类型:

foreach(Control b in _SelectionPanel.Controls)
{
    if (b is Button)
    {
        ((Button)b).Image = null;
        //Alternatively
        (b as Button).Image = null;
    } 
}

在循环的上下文中,
b
是一个控件。即使在检查之后。要获取图像属性,需要将其强制转换为按钮类型:

foreach(Control b in _SelectionPanel.Controls)
{
    if (b is Button)
    {
        ((Button)b).Image = null;
        //Alternatively
        (b as Button).Image = null;
    } 
}
foreach(类型()的_SelectionPanel.Controls.OfType()中的变量b)
{
((按钮)b).Image=null;
}
您可以仅迭代button类型的控件,然后将变量显式强制转换为button。

foreach(选择面板.controls.OfType()中的变量b)
{
((按钮)b).Image=null;
}


您可以只迭代button类型的控件,然后显式地将var强制转换为button。

这是winforms吗?不管是什么,如果
控件
没有
图像
属性,但实际运行时类型
b
有,则需要将引用转换为实际运行时类型。
(b为按钮)。Image=nullL.B:很遗憾,这不起作用。埃德:是的,我正在使用WinForms,好的,谢谢。@RichardJacobs是的,这是一个惰性代码:)这是WinForms?不管是什么,如果
控件
没有
图像
属性,但实际运行时类型
b
有,则需要将引用转换为实际运行时类型。
(b为按钮)。Image=nullL.B:不幸的是,这不起作用。埃德:是的,我正在使用WinForms,好的,谢谢。@RichardJacobs是的,这是一个懒惰的代码:)你打败了我。当我开始写我的时候,你的回复不在这里。这很有效。非常感谢你。我会接受这个答案,直到极限消失。马修斯·罗卡:无论如何,谢谢!:-)你赢了我。当我开始写我的时候,你的回复不在这里。这很有效。非常感谢你。我会接受这个答案,直到极限消失。马修斯·罗卡:无论如何,谢谢!:-)您也可以使用
foreach(在_selectionPanel.Controls.OfType()中的按钮b)
,这样您就不必在代码中强制转换它。谢谢,实际上我不知道,为了避免编译错误(我想它会出错),我写了您也可以使用
foreach(在_selectionPanel.Controls.OfType()中的按钮b)
这样您就不必在代码中强制转换它了。谢谢,实际上我不知道这一点,只是为了避免编译错误(我认为它会出错),我写了这个