53

一部のアプリケーションは、コントロールの位置を変更して、可能な限り解像度を調整することに気付きました。ウィンドウが最大化されている場合、すべてのGUIでバランスが取れているように設定されます。私の質問は、Visual Studio 2010 C#でこの機能を作成または実装することは可能ですか?

4

10 に答える 10

72

DockプロパティとAnchorプロパティを使用します。 ここに良い記事があります。これらは、最大化/最小化するときに変更を処理することに注意してください。これは、画面の解像度が変わった場合とは少し異なりますが、同じ考えに沿ったものになります。

于 2010-11-22T18:12:58.523 に答える
27

これらの組み合わせを使用して、目的の結果を取得します。

  1. プロパティをNoneに設定Anchorすると、コントロールのサイズは変更されず、位置が移動するだけです。

  2. プロパティをTop+Bottom + Left + Rightに設定Anchorすると、コントロールのサイズは変更されますが、位置は変更されません。

  3. Minimum Sizeフォームのを適切な値に設定します。

  4. プロパティを設定Dockします。

  5. イベントを使用Form Resizeして、必要なものを変更します

(1)〜(4)でフォントサイズ(ラベル、テキストボックス、コンボボックスなど)がどのように影響を受けるかはわかりませんが、(5)で制御できます。

于 2014-11-25T10:28:14.627 に答える
10
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);
}
于 2012-09-16T07:15:07.430 に答える
2

..そしてそれを処理するための解像度の変更を検出するには(SwDevMan81が提案するようにドッキングとアンカーを使用している場合)、Microsoft.Win32のSystemEvents.DisplaySettingsChangedイベントを使用ます。

于 2010-11-23T07:45:12.073 に答える
0

ここでは、 https://www.netresize.net/index.php?c = 3a&id = 11#buyoptを使用するのが好きです。ただし、有料版です。

サイトライセンス(無制限の開発者)を1つ購入すると、ソースコードを取得することもできます。

しかし、私はnugetパッケージソリューションを見つけています。

于 2019-08-08T07:09:23.660 に答える
0

申し訳ありませんが、質問を遅く見ました。これは、私にうまく機能する簡単なプログラムによる解決策です。

これらのグローバル変数を作成します。

 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);
                

        }


    }

これがお役に立てば幸いです。私のプロジェクトでは完璧に機能します。

于 2020-08-25T12:12:17.783 に答える
-1

ページの読み込み時にこのコードを追加して、すべてのコントロールを実行するか、コンテナにすべてのコントロールを追加します

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;
于 2013-02-04T12:48:27.753 に答える
-1

フォームのloadイベントにこの行を追加します

this.WindowState = FormWindowState.Maximized;
于 2013-06-14T09:28:13.950 に答える
-2
private void MainForm_Load( object sender, EventArgs e ) 
     { 
        this.Size = Screen.PrimaryScreen.WorkingArea.Size 
     }
于 2015-02-26T02:08:54.187 に答える
-5
this.WindowState = FormWindowState.Maximized;
于 2016-09-29T13:13:27.840 に答える