【问题标题】:Adding a control to another control which is created at runtime将控件添加到在运行时创建的另一个控件
【发布时间】:2016-04-25 02:51:39
【问题描述】:

我正在尝试将图片框控件添加到在运行时创建的面板中。 这是我正在研究的国际象棋游戏。我想为每个面板添加一个图片框,稍后将图像分配给控件。这是我目前所拥有的:

//Sets the number of rows on the chess board
for (int i = 0; i < 8; i++)         
{ 
    //Set the number of columns on the board
    for (int j = 0; j < 8; j++)     
    {
        ChessSquare sq = new ChessSquare(((char)(65 + i)).ToString(), 7- j);
        sq.Color = (i + (j % 2)) % 2 == 0 ? Color.Black : Color.White;

        Panel p = new Panel()
        {
            Size = new Size(blockSize, blockSize),
            BackColor = sq.Color,
            Tag = sq,
            Location = new Point(blockSize * i + 15, blockSize * j + 15),
            BackgroundImageLayout = ImageLayout.Stretch
        };
        p.MouseEnter += new EventHandler(squareMouseEnter);
        p.MouseLeave += new EventHandler(squareMouseLeave);
        p.Click += new EventHandler(squareMouseClick);

        chessBoardPanels[i, j] = p;
        groupBox1.Controls.Add(p);
    }
}
//SetUp Board
SetUpBoad Setup = new SetUpBoad();
SetUpBoad(chessBoardPanels);

【问题讨论】:

  • 您的问题是什么,到目前为止您遇到了什么问题?编译器错误?运行时错误?

标签: c#


【解决方案1】:

由于您已经将Panels 放入面板数组 (?)

chessBoardPanels[i, j] = p;

您可以现在或以后添加PictureBoxes..:

PictureBox pb = new PictureBox ();
pb.Size = ..
pb.BackColor = Color.Transparent;

chessBoardPanels[i,j].Controls.Add(pb);

要稍后访问它们,您可以将它们的第一个 Control 转换为 PictureBox

PictureBox pb = (PictureBox)chessBoardPanels[i,j].Controls[0];
pb.Image = aQueenImage;

如果您只想在需要检查的部分添加PictureBox

if (chessBoardPanels[i,j].Controls.Count > 0)
{
   PictureBox pb = (PictureBox)chessBoardPanels[i,j].Controls[0];
   pb.Image = aQueenImage;
}

要将一块从&lt;i1,j1&gt; 移动到&lt;i2, j2&gt;,您可以按预期进行:

chessBoardPanels[i1,j1].Controls[0].Parent = chessBoardPanels[i2,j2];

我注意到您正在连接鼠标事件。如果您想使用它们来移动棋子,请记住 透明度不适用于 Winforms 中的重叠控件,因此当棋子框穿过 Panels 时,@ 周围不会有工作透明度987654334@。

虽然 pBox 嵌套在 Panel 中,但一切都很好,但要移动它,您必须首先使其成为这些面板的父级的子级,并且仅在 MouseUp 上将其添加到目标 Panel;坐标校正可以解决,但透明度,如果你需要它,将是一个更大的问题..

通常的建议是考虑drawing 至少是那些棋盘格,甚至可能是底板上的棋子-Panel(或棋盘-PictureBox

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多