2011-07-04 5 views
1

ユーザーが使用している画面解像度に関係なく、Winformアプリケーションコントロールを特定の場所と特定のサイズにしたい。C#winformダイナミックコントロールサイジング

誰かがパネルをスクリーン上で60%ダウンしてから100%ダウンしてスクリーンの全長にするようにパネルを整形する方法の簡単な例を教えてください。

基本的にスクリーン解像度が何であれ、パネルはwinformの40%をアプリで60%ダウンさせることになります。

ありがとうございます!

解像度が800X600または1024X760の場合でも同じ%を使用したいと思っています。

+0

TableLayoutPanelを見てみましたか? – Tigran

+1

フォームの40%を占めるパネル、またはスクリーンの40%を占めるフォーム? – DarkSquirrel42

+0

パネルは40% –

答えて

2

SplitContainerを使用すると、フォームを2つの領域に分割できます。方向を水平に変更すると、2つの領域が得られます.1つは画面の上から始まり、もう1つはもう一方の面から始まります。今、あなたは、パネルの各の最小サイズを定義することができます

SplitContainer.Panel1MinSize = Convert.ToInt32(0.6 * Form.ActiveForm.ClientSize.Height); 
SplitContainer.Panel2MinSize = Convert.ToInt32(0.4 * Form.ActiveForm.ClientSize.Height); 

これは、トップパネルには、クライアント領域の60%とその下の40%を取ることができます。フォーム上で自動的に60%ダウンします。次に、任意のコントロールをパネルに配置してパネルにドッキングすることができます。Control.Dock = DockStyle.(something)

他の方法は、基本的には位置とサイズを計算することです。

:今、あなたのように、コントロールのサイズと位置を設定することができ

int X = 0; // Leftmost 
int Y = Convert.ToInt32(0.6 * Form.ClientSize.Height); // 60% from topmost point 

:あなたはとダウンアプリ上Form.ClientSize.Widthとしてクライアント領域の幅を取得し、60%の先頭X、Y位置することができます

Control.Size = new Size(Form.ClientSize.Width, Convert.ToInt32(0.4 * Form.ClientSize.Height)); Control.Location = new Point(0, Convert.ToInt32(0.6 * Form.ClientSize.Height); 

だから、あなたがあなたの記事で書いたように行動するForm1label1ためを強制したい場合は、1つの可能性は、このようになります:

private void Form1_Resize(object sender, EventArgs e) 
{ 
    label1.Size = new Size(this.ClientSize.Width, Convert.ToInt32(0.4 * this.ClientSize.Height)); 
    label1.Location = new Point(0, Convert.ToInt32(0.6 * this.ClientSize.Height)); 
} 
2

あなたがそれを設計どおりなしに、falseにAutoSizeプロパティを設定し、(ピクセル)と同じサイズAutoScaleModeプロパティをフォームを維持し、FormBorderStyleで「固定」のいずれかのオプションを使用するには。これにより、システムまたはユーザーがフォームのサイズを変更しようとするすべての試行を抑止する必要があります。つまり、サイズ(ピクセル単位)になりますが、これは画面の解像度が異なると大きくなったり小さくなったりすることがあります。

フォームを画面に対して「同じサイズ」にしたい場合は、サイズを変更せずに起動時に画面サイズを読み、フォームの場所とサイズのプロパティを設定して、あなたが望むスクリーンの相対的な面積。

0

System.Windows.FormsにあるScreenという静的クラスを使用できます。次のように はちょうどあなたのパネルの幅と高さを設定します。

panel.Height = Screen.PrimaryScreen.WorkingArea.Height; 
panel.Width = Screen.PrimaryScreen.WorkingArea.Width * 40/100; 

を、あなたは、このオブジェクトのプロパティを使用して、パネルの上部を設定することができます。しかし、私はあなたのパネルが別のフォームにある場合、Top & Leftプロパティは明らかにフォームを含んでいることに関連していることに気づかなければなりません。