我正在尝试使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;
答案 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;