10

私の問題に対する有効な解決策が見つからないまま、いくつかのスタック オーバーフローに関する質問を読みました。フォームのサイズが変更されるたびにコントロールのサイズを変更するにはどうすればよいですか? 形が大きくなったり小さくなったりしたら、大きくしたり小さくしたりしたいです。

Visual Basic では、これは form.Zoom プロパティを使用して非常に簡単に実行できました (もちろん、コントロールのサイズ変更は実際には必要ありませんでしたが、必要なものは解決されました)。残念ながら、これは C# の winforms では利用できません。

ここに私が運なしで試したいくつかの他のことがあります:

private void formMain_Resize(object sender, EventArgs e)
{/*
double scale;
this.scaleWidth = (float)this.Width / (float)this.origWidth;
this.scaleHeight = (float)this.Height / (float)this.origHeight;
if (this.scaleHeight > this.scaleWidth)
{
    scale = this.scaleHeight;
}
else
{
    scale = this.scaleWidth;
}

foreach (Control control in this.Controls)
{
    control.Height = (int)(control.Height * this.scaleHeight);
    control.Width = (int)(control.Width * this.scaleWidth);
    this.Refresh();
    //  control.Font = new Font("Verdana", control.Font.SizeInPoints * heightRatio * widthRatio);
}
///////This scaling didnt work for me either
//this.Scale(new SizeF(this.scaleWidth, this.scaleHeight));
//this.Refresh();
*/
}

別のスタック オーバーフローの質問で実際に動作するコードのサンプルを見落としていた場合は、それを見たいと思いますが、私が見つけたものは、動作していない上記のものと似ていました。

おそらく私はそれを悪用していたので、誰かがサンプルコードを投稿して、この質問を続けている私たちのために問題を解決する方法を示すことができます.

また、自動的に許可されると考えて、アンカー/ドッキング ツールのいくつかを使用しようとしましたが、そうではありませんでした。

4

5 に答える 5

23

最良のオプションは、を使用することTableLayoutPanelです。フォームに配置し、プロパティをTableLayoutPanelに設定し、必要な行と列を作成して、セル内にコントロールを配置します。もちろん、セル内のコントロールを設定する必要があるため、セル サイズの変更に応答します。状況によっては、セルに を入れて、その中にコントロールをドロップする必要がある場合があります。これは、すべてのセルに 1 つのコントロールしか含めることができないためです。コントロールに/を設定する必要がある場合もあります。DockFillDock/AnchorPanelRowSpanColumnSpan

を使用することTableLayoutPanelで、コントロールの配置方法を完全に制御できます。行と列の絶対サイズまたはパーセンテージ サイズを設定できます。

于 2013-03-04T07:01:53.540 に答える
7

コントロールのアンカーを使用します。上、下、左、右を固定するオプションがあります。そして、あなたは行ってもいいです。

于 2013-02-28T09:25:42.457 に答える
1

コードでやろうとしているのは、あまり良い方法ではないコントロールのサイズを変更することです。通常、フォームのサイズを変更するときにボタンとテキスト ボックスのサイズを変更するべきではありませんが、移動 (場所の変更) が必要になることがよくあります。一部のコントロールは、サイズ変更されたフォームに従ってサイズを変更する必要がありますが、ほとんどの場合、1 つのディメンションのみです。作業領域に使用される中央コントロール (たとえば、描画用のツールを開発している場合) は、両方の寸法のサイズを変更する必要があります。コントロールの Dock プロパティや Anchor プロパティを適切に設定することで、これらすべてを実現できます。

textBox1.Dock = DockStyle.Bottom;
textBox1.Anchor = AnchorStyles.Bottom & AnchorStyles.Left;

これらはすべて、デザイナを使用するときにプロパティ パネルで簡単に設定することもできます。

しかし、それだけでは不十分な場合は、まれに、コントロールの場所だけを変更したい場合があります。

textBox1.Location = new Point(newX, newY);
于 2013-02-28T09:44:59.907 に答える