有没有办法让我的代码使图片盒透明更短? C#初学者

时间:2016-01-31 01:06:48

标签: c#

我正在尝试使4个图片框透明,以便显示背景。这就是我所拥有的:

pbBordermain.Controls.Add(pb1);
pbBordermain.Controls.Add(pb2);
pbBordermain.Controls.Add(pb3);
pbBordermain.Controls.Add(pb4);
pb1.BackColor = Color.Transparent;
pb2.BackColor = Color.Transparent;
pb3.BackColor = Color.Transparent;
pb4.BackColor = Color.Transparent;
  • 有没有办法可以缩短它?
  • 我尝试使用逗号分隔图片框但出现错误。那是为什么?

3 个答案:

答案 0 :(得分:2)

这个问题的重要部分是:您是否需要访问代码中的PictureBox?如果不是,你可以这样做:

for (int=0;i<numberOfPictureBoxes;i++)
{
    pbBorderMain.Controls.Add(new PictureBox() {
        BackColor = Color.Transparent
    });
}

以这种方式构建它们之后访问组件是可能的,但会给代码增加不必要的复杂性。如果您有动态数量的元素,我只会推荐这个。对于固定数字,您的替代方案可能看起来不是最好,但将来更容易维护。

答案 1 :(得分:2)

我不同意其他答案,说你的代码很好。

当您想要添加或删除图片框时会发生什么?如果您想通过更改大小,选择不同的背景颜色,或者将其他作为一组使用这些项目来更改设置例程,会发生什么?您必须在整个地方更改代码,并一次一行地添加和删除一行。

不,你应该开始做一些功能。设置这些属性时,您在做什么。这是某种初始设置吗?好吧,创建一个名为Setup的函数。为每个图片框调用它。

// The setup routine that is the one place in your system that knows how to do this task
public void SetUpPictureBox(ControlCollection collectionParent, PictureBox pictureBox) {
   collectionParent.Add(pictureBox);
   pictureBox.BackColor = Color.Transparent;
}

// All your picture boxes that are important to you for whatever reason
// can now be worked with as a unit.
List<PictureBox> importantPictureBoxes = new list<PictureBox> { pb1, pb2, pb3, pb4 };
// Set up all the important PBs.
importantPictureBoxes.ForEach(pb => SetupPictureBox(pbBordermain.Controls, pb));

即使这只是一些原型代码,也不会对原型进行更改?难道你不想像专业程序员一样开始思考吗?我花了大约25秒来输入这段代码 - 不要落入意大利面条代码的土地上。考虑一下你在做什么,写下好的代码。

即使变量名importantPictureBoxes暗示目的 - 这些是为了什么?你为什么和他们一起工作?用一个明确的名称来描述这个目的。这意味着您不必撰写评论!方法名称和变量名称为您记录代码。真棒。

答案 2 :(得分:0)

首先,短代码并不总是好的代码。尽管用较少的线条表达某些东西是可能的,但并不总是更清楚 - 而使用语言编码语言的全部意义在于清晰。

在这种情况下,您可以重新排列代码,但在保持功能的同时很难缩短代码。假设添加/透明函数的顺序并不重要,您可以随时排列,因为C#忽略了额外的空格:

pbBordermain.Controls.Add(pb1); pb1.BackColor = Color.Transparent;
pbBordermain.Controls.Add(pb2); pb2.BackColor = Color.Transparent;
pbBordermain.Controls.Add(pb3); pb3.BackColor = Color.Transparent;
pbBordermain.Controls.Add(pb4); pb4.BackColor = Color.Transparent;