【问题标题】:C# Windows Form help! A panel is not displayingC# Windows 窗体帮助!面板未显示
【发布时间】:2020-10-28 12:48:39
【问题描述】:

我必须在 C# windows 窗体中用面板做一个棋盘。我有一个按钮、两个文本框(用于设置列数和行数)和一个大面板,我将在其中放置小面板。

这是按钮点击事件:

private void button1_Click(object sender, EventArgs e)
        {
            int x, y, width, height, colors=0;
            Panel paneln;

            rows = Convert.ToInt32(textBox1.Text);
            columns = Convert.ToInt32(textBox2.Text);

            height = panel1.Size.Height / rows;
            width = panel1.Size.Width / columns;
            x = panel1.Location.X;
            y = panel1.Location.Y;

            for (int i=0;i<rows;i++)
            {
                for(int k = 0;k<columns;k++)
                {
                    paneln = new Panel();
                    paneln.Location = new Point(x, y);
                    paneln.Size = new Size(width, height);

                    if (colors % 2 == 0)
                        paneln.BackColor = Color.Black;
                    else
                        paneln.BackColor = Color.White;
                   
                    paneln.BringToFront();
                    panel1.SendToBack();
                    this.Controls.Add(paneln);

                    x += width;
                    colors++;
                }
                x= panel1.Location.X;
                y += height;
                if (columns % 2 == 0) colors++;
            }
            button1.Enabled = false;
        }

它工作正常,但如果列值是偶数,则不显示最后一个面板(右下角)。

例如,对于 rows=4 和 columns=4 我得到这个:

黑白无常

W B W B

黑白无常

W B W

我试图强制内部 for 在最后一行再执行一个循环,但随后它放置了两个面板,这实际上是有道理的,并且让我认为它实际上创建了面板对象,但不知何故它没有显示。

有什么建议吗?谢谢!

【问题讨论】:

  • 您缺少:this.Controls.Add(paneln) 将面板添加到表单中。
  • 使用“绘图”控件是一种疯狂的开销,完全没有必要。只需使用父面板的Paint 事件并通过Graphics.FillRectangle 绘制棋盘即可。每当您需要重新绘制棋盘时(例如发生移动时),请致电 panel.Invalidate
  • @jdweng 我怎么会错过最后一个?当 i=3 和 k=3 时循环执行
  • @GyörgyKőszeg 这是我们老师说的,这是第一个Windows Form作业,我必须这样做:(
  • 面板不够大。您是否想将新面板添加到表单或 Panel1 中?您正在向其中添加新面板,我不确定是 Form 还是 Panel1。问题是 x 和 y 的起始值。面板 1 的位置不应该被使用。

标签: c# winforms panel


【解决方案1】:

好的,我想通了! 我在做

paneln.BringToFront();
panel1.SendToBack();

在将 paneln 添加到表单之前,所以它不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 2012-01-27
    相关资源
    最近更新 更多