一部のアプリケーションは、コントロールの位置を変更して、可能な限り解像度を調整することに気付きました。ウィンドウが最大化されている場合、すべてのGUIでバランスが取れているように設定されます。私の質問は、Visual Studio 2010 C#でこの機能を作成または実装することは可能ですか?
10 に答える
これらの組み合わせを使用して、目的の結果を取得します。
プロパティをNoneに設定
Anchor
すると、コントロールのサイズは変更されず、位置が移動するだけです。プロパティをTop+Bottom + Left + Rightに設定
Anchor
すると、コントロールのサイズは変更されますが、位置は変更されません。Minimum Size
フォームのを適切な値に設定します。プロパティを設定
Dock
します。イベントを使用
Form Resize
して、必要なものを変更します
(1)〜(4)でフォントサイズ(ラベル、テキストボックス、コンボボックスなど)がどのように影響を受けるかはわかりませんが、(5)で制御できます。
float widthRatio = Screen.PrimaryScreen.Bounds.Width / 1280;
float heightRatio = Screen.PrimaryScreen.Bounds.Height / 800f;
SizeF scale = new SizeF(widthRatio, heightRatio);
this.Scale(scale);
foreach (Control control in this.Controls)
{
control.Font = new Font("Verdana", control.Font.SizeInPoints * heightRatio * widthRatio);
}
ここでは、 https://www.netresize.net/index.php?c = 3a&id = 11#buyoptを使用するのが好きです。ただし、有料版です。
サイトライセンス(無制限の開発者)を1つ購入すると、ソースコードを取得することもできます。
しかし、私はnugetパッケージソリューションを見つけています。
申し訳ありませんが、質問を遅く見ました。これは、私にうまく機能する簡単なプログラムによる解決策です。
これらのグローバル変数を作成します。
float firstWidth;
float firstHeight;
ロード後、これらの変数を入力します。
firstWidth = this.Size.Width;
firstHeight = this.Size.Height;
次に、フォームを選択し、これらのコードをフォームのSizeChangeイベントに配置します。
private void AnaMenu_SizeChanged(object sender, EventArgs e)
{
float size1 = this.Size.Width / firstWidth;
float size2 = this.Size.Height / firstHeight;
SizeF scale = new SizeF(size1, size2);
firstWidth = this.Size.Width;
firstHeight = this.Size.Height;
foreach (Control control in this.Controls)
{
control.Font = new Font(control.Font.FontFamily, control.Font.Size* ((size1+ size2)/2));
control.Scale(scale);
}
}
これがお役に立てば幸いです。私のプロジェクトでは完璧に機能します。
ページの読み込み時にこのコードを追加して、すべてのコントロールを実行するか、コンテナにすべてのコントロールを追加します
int x;
Point pt = new Point();
x = Screen.PrimaryScreen.WorkingArea.Width - 1024;
x = x / 2;
pt.Y = groupBox1.Location.Y + 50;
pt.X = groupBox1.Location.X + x;
groupBox1.Location = pt;
フォームのloadイベントにこの行を追加します
this.WindowState = FormWindowState.Maximized;
private void MainForm_Load( object sender, EventArgs e )
{
this.Size = Screen.PrimaryScreen.WorkingArea.Size
}
this.WindowState = FormWindowState.Maximized;