2017-08-06 5 views
1

回答:下記のコメントセクションを参照してください。この質問が重複とマークされた後、適切なSOの回答を投稿できないようです...C#winform appをフルスクリーンにリサイズする方法とそれが正しく機能していますか?

背景:WinformsとC#Visual Studio 2012、.net 4.5をWin7でテストします。

希望の動作:「最大化」ボタンでは、タスクバー以外の画面全体を使用するようにメインフォームのサイズを変更し、タイトル/キャプションバーを保持します。

これは複製ではありません。この質問は、他の質問の解決策として掲示されているにもかかわらず、なぜこのコードがうまく機能しないのかについてです。ありがとう!

Iは、以下のフォームメソッド符号化:タスクバーを最大にすることは、所望のように目に見えるままであるが、ここに示されているように、メインフォームが(メインフォームの右下を全体予想領域を行い使用していない残念ながら後

private void HSBmainForm_Resize(object sender, EventArgs e) 
    { 
     // On clicking Maximize, sender is main form, but event is "Empty" so useless... 
     // Instead, look at window state and adjust form size as appropriate 
     switch(WindowState) { 
      case FormWindowState.Maximized: { 
       var workArea = Screen.FromControl(this).WorkingArea; // supposedly, screen size minus taskbars and bound toolbars, in pixels 
       Debug.WriteLine(workArea); 
       // Nope, eliminates desired caption bar and min/max/etc buttons: FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; // no border when maximized 
       this.MaximumSize = new System.Drawing.Size(workArea.Width, workArea.Height); // supposedly, pixels 
       } break; 
      case FormWindowState.Normal: 
       this.MaximumSize = new System.Drawing.Size(1600, 900); // Minimum workable size for layout of app's forms 
       break; 
     }; 
     base.OnLocationChanged(e); // process the event in base class (actually performs the resize) 
    } 

を画面の端には行かない): enter image description here

何が悪いと思いますか?予め

おかげで、 よろしく、デイブ

PS:この試験では、Windows画面解像度が1823 X 978及び ワークエリアレポート{X = 79、Y = 0、幅= 1744、高さ= 963を報告}デバッグ出力。

PPS:上記の結果は、最初に最大化をクリックした後です。最小化は常に期待通りに機能します。 2回目以降の最大化のクリックは正しく機能し、画面全体を使用します。アイデア?基本クラスのイベントプロセッサを2回呼び出しても、最初の試行では機能しません。

+0

フォームを最大化しないと、タスクバーなしで画面全体のワークスペースが使用されますか? – IllidanS4

+0

これは重複していません。この質問は、他の質問やSO以外の場所への解決策として掲示されているにもかかわらず、なぜこのコードがうまく機能しないのかについてです。ありがとう! –

+0

@ IllidanS4、希望の動作を見てください、ありがとう! –

答えて

0

この問題はMaximumSizeが設定されたためです。メインフォームにMaximumSizeを設定する理由はありません(なぜこのアプリケーションに設定されたのかわかりません)。 MaximumSize設定(デザイナで)を削除し、上記のイベントハンドラを削除すると、(上記の望ましい動作に従って)最大化が正しく機能します。

WinFormsフレームワークは、WindowStateをMaximizedに設定し、フォームサイズをMaximumSize(指定されている場合)またはWorkingAreaサイズ(MaximumSizeが指定されていない場合)に設定するなど、イベントハンドラを呼び出す前に実質的なイベント処理を行います。これは、あなたのイベントハンドラが最初に呼び出され、ベースクラスのイベントプロセッサを呼び出すことが予想される多くのフレームワークから逆さまです...したがって、Maximizeが2回目の期待通りに動作するような奇妙な動作(MaximumSize、 2回目に使用された)...

関連する問題