1

好吧,标题几乎说明了一切......我正在构建一个 C# WinForms 国际象棋游戏,并试图实现调整棋盘大小的能力。

我目前有一个FormBorderStyle设置为SizablethisTableLayoutPanel的表单,以及这个Layout事件处理程序

private void Form1_Layout(object sender, LayoutEventArgs e)
{
    panBoard.SuspendLayout();

    int xDiff = this.Size.Width - oldSize.Width;
    int yDiff = this.Size.Width - oldSize.Height;
    int diff = xDiff > yDiff ? xDiff : yDiff;

    this.Size = new Size(oldSize.Width +
    diff, oldSize.Height + diff);
    sizeXY += diff;
    game.SizeXY = sizeXY;

    panBoard.ResumeLayout();
}

当我运行应用程序并调整表单大小时,背景图像会稍微缩放太多,如这两张图片所示。的TableLayoutPanel单元格边框应该与图像中的单元格对齐。关于我做错了什么的任何想法?MTIA :-)

4

2 回答 2

2

您的图片看起来像正在缩放到表格的整个大小,而不仅仅是棋盘的区域。

而不是使用

this.Size

作为缩放的基础,尝试使用

this.ClientSize

表单客户区的大小是不包括边框和标题栏的表单大小。

http://msdn.microsoft.com/en-us/library/9278sfx2(v=vs.110).aspx

于 2013-02-05T05:01:27.293 回答
1

是的....使用这些图片绝对是一个更好的解决方案。但请允许我也炫耀几年前我为自己制作的应用程序使用的一个肮脏的把戏。

我拿了一个表格并TableLayoutPanel在其中添加了一个。将TableLayoutPanel.Dock属性设置为Fill。将表单大小设置为正方形(例如 400 * 400)。将TableLayoutPanel列和行设置为 8,将宽度设置为Percentage50。然后我想在运行时生成并使用逻辑循环Panel将它们添加到每个框中。在运行时更改每个备用面板的 (以将它们显示为国际象棋)。将每个面板的属性设置为. 您可以使用面板的属性来更好地查看它们。运行您的应用程序,一切都应该按预期进行。TableLayoutPanelforBackColorDockFillMargin

这个技巧的几个优点是,您可以随时轻松更改棋盘的颜色。TableLayoutPanel也可以更改盒子的数量(如果不是国际象棋)。我知道这是您不想要的东西,但绝对是您可以考虑的东西。它也不会使您的应用程序变得繁重。相信我,输出看起来很酷。

希望能帮助到你。

于 2013-02-05T10:23:09.700 回答