2013-02-28 29 views
7

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

視覚的な基本では、これは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(); 
*/ 
} 

私はそれを見てみたい、別のスタックオーバーフローの質問上のコードのactualy 作業サンプルが、私が見つけたものを見落としている場合上記のものに似ていないものは働いていません。

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

また、私はアンカー/ドッキングツールのいくつかを使って自動的に許可すると思ったが、そうしなかった。

+0

あなたはドックとアンカーのプロパティを使用しています.....より良い方法でそれらを使用してください....彼らは私が推測する成功の鍵でなければなりません。また、あなたのUIのスクリーンショットを求めることができますか? – Sandy

答えて

1

私にとってはうまくいく代替ソリューションが見つかりました。ソリューションに関する否定的または肯定的なコメントを感謝します。

複数のスプリットコンテナと分割されたコンテナを別々の地域に分割して使用することで、レイアウトの主要部分を切り離すことができ、そこではドッキングとアンカーを利用して、それは美しく動作します。

私は、いくつかの人々がオンラインでスプリットコンテナが多くのリソースを使用していることを知っていることを指摘します。

5

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

+1

彼はすでにアンカー/ドックを試したことを述べています。また、この質問は、彼がすべてのコントロールを均一に拡大することを望んでいることを意味しています。これは質問に対する答えではありません。 –

+0

彼はアンカー/ドックを使用する可能性があります。問題は、彼がそれを正しく使用したかどうかです。 –

+0

アンカーとドッキングを試みましたが、実際にはコントロールのサイズを変更するだけではなく、コントロールを「移動する」ように見えます – Kairan

1

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

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

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

しかし、それはあなたのために十分でない場合、まれに、あなたが最も確かにのみ、コントロールの位置を変更したくなるでしょう:

textBox1.Location = new Point(newX, newY); 
15

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

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

1

コントロールがグループボックスにある場合は、グループボックスのプロパティを変更してサイズを変更するようにしてください。ボックス内のコントロールはボックスで制御されます。ボックスサイズは、別のボックス内にない限り、フォームによって制御されます。

関連する問題