1

タイトルがすべてを物語っています...私は C# WinForms チェス ゲームを構築しており、ボードのサイズを変更する機能を実装しようとしています。

私は現在、このイベントハンドラーと同様に、にFormBorderStyle設定されたフォームSizableこれTableLayoutPanelを持っています。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();
}

アプリを実行してフォームのサイズを変更すると、これらの 2 つの図に示されているように、背景画像が少し大きくなりすぎます。の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

うん....それらの写真を使用することは間違いなくより良い解決策です。しかし、私が数年前に自分用に作成したアプリケーションに使用した汚いトリックも披露させてください.

フォームを取り、その中に a を追加しTableLayoutPanelました。TableLayoutPanel.Dockプロパティを に設定しますFill。フォームのサイズを正方形 (例: 400 * 400) に設定します。TableLayoutPanel列と行を 8 に設定し、幅をPercentageすべて 50 に設定します。次に、実行時に生成し、論理ループを使用Panelして各ボックスに追加したいと思います。実行時に各代替パネルの を変更します (チェスとして表示するため)。各パネルのプロパティを に設定します。パネルのプロパティをいじって、見栄えを良くすることができます。アプリケーションを実行すると、すべてが期待どおりになります。TableLayoutPanelforBackColorDockFillMargin

このトリックのいくつかの利点は、チェス盤の色をいつでも簡単に変更できることです。ボックスの数TableLayoutPanelも変更できます (チェスでない場合)。これはあなたが探していたものではないことはわかっていますが、間違いなく検討できるものです。アプリケーションが重くなることもありません。そして、私を信じてください、出力はクールに見えます.

それが役に立てば幸い。

于 2013-02-05T10:23:09.700 に答える