2017-01-05 55 views
-3

私は、多少複雑なコントロールの配置(C#で書かれています)を持ついくつかのフォームを持っています。フォームを含むウィンドウのサイズを(実行時に)変更できるようにし、フォームの内容がすべてサイズに比例して変更され、相対位置が保持されるようにしたい。ウィンドウのサイズを変更したときに、Windowsフォームの内容のサイズが比例して変更されることはありますか?

私は多くの検索を行い、多くの人がアンカープロパティの使用について話していることがわかりましたが、これは私にとってはうまくいかないようです。私がすべてのエッジにアンカーすると、コントロールのサイズは変更されますが、お互いに重なり始めます。私は彼らがフォーム上の相対的な位置を保持し、より大きく/小さくなる必要があります。

画面上の写真(フォームの)のサイズを変更すると、それができるようになります。それについて最善の方法は何ですか?

おかげ

+0

C#/ Winformsについて話していますか?あなたの質問は少し不明で、コードは表示されません。 –

+0

ピーナッツより複雑なものについては、[TableLayoutPanel](https://msdn.microsoft.com/en-us/library/h21wykkx(v=vs.110).aspx)コンテナを組み込むことをお勧めします。 –

+0

@Ransomどのようなコードを見たいですか? – Sam

答えて

0

私は、フォームのForm.Paintイベントを処理して、コントロールのサイズと位置を計算/調整します。これは最もクリーンでシンプルなソリューションではありませんので、可能であれば、組み込みのレイアウトコントロールを実際に動作させるようにしてください。フォームのアスペクト比が変更された場合、あなたのレイアウトが文句を言わないので、解明

Private Sub MyForm_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint 

      Try 

       'get height of title 
       Dim titleHeight As Integer = RectangleToScreen(parent.ClientRectangle).Top - parent.Top 

       'set paddingTop to height of title + height of menustrip(if you have one) + 10px(can be whatever you want) padding 
       Dim paddingTop As Integer = titleHeight + parent.MenuStrip1.Height + 10 

       REM Adjust controls sized to scale based on new form size 
       PictureBox1.Size = New Size(CInt(Width/4), CInt(Height/2)) 
       PictureBox1.Location = New Point(CInt(Width/4 + PictureBox1.Width/2), paddingTop) 

      Catch ex As Exception 
       MsgBox(ex.Message) 
      End Try 
     End If 


    End Sub 

はもちろん、あなたが親フォームに対するあなたのコントロールの規模や場所を知っている必要があります。また、このような問題を回避するには、親フォームの最小サイズを考慮する必要があります。 Form.SizeChangedを処理してコードの実行回数を減らすこともできますが、十分ではないシナリオが発生しました。

関連する問題