【问题标题】:Picturebox colour depending on a variable图片框颜色取决于变量
【发布时间】:2017-06-14 12:33:18
【问题描述】:

我想从我对编码非常陌生的事实开始,而且我不知道很多东西。我没有任何真正的代码可以显示这个问题,我希望一个问题可以。

无论如何,我要在 Windows 窗体中制作一个简单的游戏。不深入细节,我的想法需要 36 个彩色方块。我想空的图片框会做。 问题是,如何使图片框成为取决于变量的四种颜色之一,然后通过单击按钮进行更改? 就像如果变量 X 等于 1,则图片框的颜色为黑色,如果为 2,则为绿色。 有可能吗?

【问题讨论】:

  • 这绝对是可能的,但我想知道你是否真的需要一个 PictureBox。我认为改用简单的Panel control,如果你只需要纯色,调整它的BackColor property 就足够了。
  • 使用switch 语句打开变量X 的值。对于每个case,设置图片框的颜色。这是最简单、最直观的方式。还有其他的。还可以考虑将 Color 值存储为变量 X。(顺便说一句:Panel 和 PictureBox 之间没有太大区别,所以不要为在它们之间进行选择而苦恼。)
  • 一个问题本身并不会真正起作用。查看How to Askhelp center 了解有关堆栈溢出的好问题的详细信息
  • 问题和你的方法的问题是你没有考虑整体情况。在决定如何做之前,必须清楚所有 UI 问题。 '如何'之前的'什么'! - 您可以在 Paint 事件中绘制所有矩形,使用 TabeleLayoutPanel、DataGridview 或数组或图片框、面板甚至标签。但是用户交互将如何?怎么了 ?有游戏碎片吗?等等等等。问题是“太宽泛”和“不清楚”.. - 更糟糕的是:到目前为止,您还没有表现出与试图提供帮助的人沟通的努力。

标签: c# winforms visual-studio colors picturebox


【解决方案1】:

当然可以。您至少有 2 种可能的方法来做到这一点:

  1. 解决方案:

    将所有 PictureBox 的颜色(或数量)保存在一个数组或列表中。按下 Button 时更新值,并循环遍历所有 PictureBox。

  2. 解决方案:

    创建一个包含图片框的新对象并添加一个更改颜色的方法。现在创建一个包含所有 PictureBox 对象的列表,并在按下按钮时更改值。

编辑:

这是创建面板列表的代码:

            List<Panel> PanelList = new List<Panel>();
        for (int i = 0; i < 36; i++)
        {
            Panel p = new Panel();
            p.Name = ($"Panel{i}");
            p.BackColor = Color.Black;
            PanelList.Add(p);
        }

啊,拿一个小组;图片框“太多了”。

【讨论】:

  • PictureBox 比 Panel 更“多”的想法从何而来?两者之间的内存量和运行时开销可以忽略不计,如果有任何差异的话。它们只是原生窗口的包装器。
  • 是的,你是对的。但正如你所看到的,使用 Panel 不仅是我的意见:“这绝对是可能的,但我想知道你是否真的需要一个 PictureBox。我认为改用一个简单的 Panel 控件,并调整它的 BackColor 属性应该如果你只需要纯色就足够了。——克里斯托弗·凯尔·霍顿"
  • 是的,他也错了。这就是促使我发表评论的原因:你不是唯一一个有这种错误信念的人。
  • @CodyGray 也许这两个控件之间的开销可以忽略不计,但是控件的明显目的又如何呢?对我来说,当我看到一个 PictureBox 被使用时,它主要是使用 Image 属性来显示一个特定的位图。只显示纯色似乎有点误导必须保持这一点的人。然后,我建议仅在您计划显示图像(现在或将来可能)时才使用 PictureBox,这样您的意图在您的设计中更加明确。
  • Panel 控件有一个BackgroundImage 属性。那可能是为了什么? :-) @christopher
猜你喜欢
  • 2016-02-07
  • 1970-01-01
  • 2022-10-25
  • 2014-09-29
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
相关资源
最近更新 更多