【问题标题】:Removing all the images in a control group删除对照组中的所有图像
【发布时间】:2016-11-04 19:27:48
【问题描述】:

当我应用此代码时,我没有得到.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;
    } 
}

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

【问题讨论】:

  • 这是winforms?不管是什么,如果Control 没有Image 属性,但b 的实际运行时类型有,则需要将引用转换为实际运行时类型。
  • (b as button).Image = null;
  • L.B:很遗憾,这行不通。
  • ED:是的,我正在使用 WinForms,好的,谢谢。
  • @RichardJacobs 是的,这是一个懒惰的代码 :)

标签: c# button foreach controls


【解决方案1】:

is 只检查类型是否为 Button。

您想使用as 来执行实际的转换,从而允许您访问 Button 的属性。如果转换无效,您将简单地获得null 引用,因此只需执行as 转换,然后在使用之前检查您的变量是否为空。

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

【讨论】:

  • 你打败了我。当我开始写我的时候,你的回复还不在这里。
  • 这行得通。非常感谢。限制结束后,我会接受这个答案。
  • Matheus Rocha:还是谢谢你! :-)
【解决方案2】:
foreach(var b in _SelectionPanel.Controls.OfType<Button>())
{
    ((Button)b).Image = null;
}

您可以只遍历 button 类型的控件,然后将 var 显式转换为 Button。

【讨论】:

  • 您也可以使用foreach(Button b in _selectionPanel.Controls.OfType&lt;Button&gt;()),这样您就不必在代码中强制转换了。
  • 谢谢,其实我不知道,只是为了避免编译错误(我以为会报错)我写的
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2016-04-14
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多