私のフォームでは、サイズを変更するときにも幅が高さの2倍(1:2)になる 必要があります。どうすればよいですか?助けてくれてありがとう、そして私の英語をごめんなさい:)
6 に答える
この投稿をチェックしてください:アスペクト比を維持しながらフォームのサイズを変更します。
重要なのはメッセージに応答するWM_SIZING
ことです。これにより、ウィンドウの長方形を変更できます。
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// Necessary to take the window frame width/height into account
this.chromeWidth = this.Width - this.ClientSize.Width;
this.chromeHeight = this.Height - this.ClientSize.Height;
this.ClientSize = new System.Drawing.Size(400, 200);
}
// ...
#region Resizer
private float constantWidth = 2;
private float constantHeight = 1;
private int chromeWidth;
private int chromeHeight;
// From Windows SDK
private const int WM_SIZING = 0x214;
private const int WMSZ_LEFT = 1;
private const int WMSZ_RIGHT = 2;
private const int WMSZ_TOP = 3;
private const int WMSZ_BOTTOM = 6;
struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SIZING)
{
RECT rc = (RECT)Marshal.PtrToStructure(m.LParam, typeof(RECT));
int w = rc.Right - rc.Left - chromeWidth;
int h = rc.Bottom - rc.Top - chromeHeight;
switch (m.WParam.ToInt32()) // Resize handle
{
case WMSZ_LEFT:
case WMSZ_RIGHT:
// Left or right handles, adjust height
rc.Bottom = rc.Top + chromeHeight + (int)(constantHeight * w / constantWidth);
break;
case WMSZ_TOP:
case WMSZ_BOTTOM:
// Top or bottom handles, adjust width
rc.Right = rc.Left + chromeWidth + (int)(constantWidth * h / constantHeight);
break;
case WMSZ_LEFT + WMSZ_TOP:
case WMSZ_LEFT + WMSZ_BOTTOM:
// Top-left or bottom-left handles, adjust width
rc.Left = rc.Right - chromeWidth - (int)(constantWidth * h / constantHeight);
break;
case WMSZ_RIGHT + WMSZ_TOP:
// Top-right handle, adjust height
rc.Top = rc.Bottom - chromeHeight - (int)(constantHeight * w / constantWidth);
break;
case WMSZ_RIGHT + WMSZ_BOTTOM:
// Bottom-right handle, adjust height
rc.Bottom = rc.Top + chromeHeight + (int)(constantHeight * w / constantWidth);
break;
}
Marshal.StructureToPtr(rc, m.LParam, true);
}
base.WndProc(ref m);
}
#endregion
}
TableLayoutControlを使用して、他のコントロールをホストします。これは、HTMLテーブルと同様に機能します。
テーブル内のセルにコントロールを追加してから、セルの幅と高さを設定できるColumnStylesとRowStylesを追加できます。測定値は、自動、絶対値、またはパーセンテージとして指定できます。パーセンテージは、ここで本当に必要なものです。
次に、このTableLayoutControlのドックをウィンドウに合わせてサイズ変更するように設定すると、セルは前に設定したパーセンテージに比例してサイズ変更されます。
実際のコンポーネントのサイズも変更するには、DockまたはAnchorプロパティのいずれかを設定する必要があります。コントロールのサイズをセルに対してどのように変更するかを指定する構成はすべて機能します。たとえば、コントロールのAnchorプロパティをに設定することで、コントロールのサイズをセル内で垂直方向にのみ変更し、同じ幅を維持したい場合があります。
AnchorStyle.Top | AnchorStyle.Bottom
一言で言えば:
- コントロールのセルに対するサイズ変更方法を設定します
- TableLayoutControlに対してセルのサイズを変更する方法を設定します(ColumnStylesおよびRowStylesを使用)
- フォームに対してTableLayoutControlのサイズを変更する方法を設定します
詳細については、http://msdn.microsoft.com/en-us/vstudio/bb798032.aspxを参照してください。
onLoad、onClickなどのイベントを使用して、特定の条件でサイズ変更を行うことができます。つまり、基本的にはあなた次第です。
いくつかの標準フォームプロパティの高さと幅があるので、これらのプロパティを調整できます。
例えば:
private void frmMain_Load(object sender, EventArgs e)
{
int height = 500;
frmMain.ActiveForm.Height = height;
frmMain.ActiveForm.Width = height / 2;
}
サイズ変更イベントに登録し、文字通りこれを行います。
this.ClientSize.Width = this.ClientSize.Height * 2;
またはフルフォームサイズ(境界線を含む)の場合
this.Size.Width = this.Size.Height * 2;
Control.Resizeイベントをチェックアウトします-また
private void Form1_Resize(object sender, System.EventArgs e)
{
Control control = (Control)sender;
control.Width = control.Height * 2;
}
以下のフォームのサイズを変更するには、より適切なものです
http://niravdaraniya.blogspot.in/2013/07/how-to-resize-form-in-cnet.html