在我的扫雷游戏中,我需要动态创建控件以便在简单 - 中等 - 困难之间切换。假设为了这个问题,hard 包含 100 个按钮。
这就是我创建它们的方式:
this.SuspendLayout(); //Creating so many things that I assume it would be faster to suspend and resume.
foreach (string i in playingField)
{
Button button = new Button();
button.Name = i;
button.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
button.Margin = new Padding(0);
button.TabIndex = 0;
button.Location = new System.Drawing.Point(3, 3);
button.Size = new System.Drawing.Size(25, 25);
button.BackgroundImage = blockImage; //##//
button.MouseDown += new System.Windows.Forms.MouseEventHandler(this.GetUnderSide);
button.UseVisualStyleBackColor = false;
minesPanel.Controls.Add(button); //Adding the controls to the container
}
this.ResumeLayout(); //Refer to above. Correct me if I'm wrong please.
如您所见,我正在通过 for 循环创建所有控件,然后添加它们。它导致每个按钮一次被绘制一次。我也尝试过name.Controls.AddRange(arrayButtons)
,但仍然导致同样的问题。个人绘画。
我需要的是一种创建所有项目的方法,然后将它们全部绘制出来,就像用 绘制单个位图一样DoubleBuffered
,但是唉,这也不起作用。
此外,我试过这个:
protected override CreateParams CreateParams
{
get
{
// Activate double buffering at the form level. All child controls will be double buffered as well.
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // WS_EX_COMPOSITED
return cp;
}
}
什么样的作品。它仅适用于应用程序启动。但是,考虑到我将在运行时更改网格大小并添加更多控件,这不是一个可行的选择。
有人告诉我,这就像使用Graphics
课堂上的方法一样简单。问题是,我不知道从哪里开始。
如果有人可以提供一些帮助来同时绘制我的所有控件,那就太好了。