2016-03-29 6 views
0

私は、バグかどうかわからない、または私がWinFormsを初めて使用してから忘れてしまったものであるかどうかわからない本当に奇妙な状況があります。ここでMDI子フォームがWinFormsの親フォームに適合しない

は何が起こるかです:

enter image description here

1)私はホームページロード私のアプリケーションを起動します。

2)私は "証券管理" をクリックしますが、最初の時間クリックすると、タブフォームレイアウトコントロールが表示されません。

3)私は家に帰り、「在庫管理」をもう一度クリックします。今回は、タブコントロールのレイアウトを示します。ここで

 private void btnStockManagement_Click(object sender, EventArgs e) 
    { 
     foreach (Form f in this.MdiChildren) 
     { 
      if (f.GetType() == typeof(frmStockManagement)) 
      { 
       f.Activate(); 
       return; 
      } 
     } 
     Form frm = new frmStockManagement(); 
     frm.MdiParent = this; 
     frm.Show(); 
    } 

私は子フォームOn_Loadイベントに使うコードです:どうすればよい

public partial class frmStockManagement : Form 
{ 
    public frmStockManagement() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
     this.ControlBox = false; 
     this.WindowState = FormWindowState.Maximized; 
     this.BringToFront(); 
    } 
} 

ここ

は、私は「証券管理On_Clickイベントのために使用するコードです私は最初に適切に表示する子フォームを取得しますか?

+0

※初回*(「表示」の単語が欠落しています)は、['Shown']を使用して取得します(https://msdn.microsoft.com/en-us/library/system.windows.forms.form.shown( v = .110).aspx)イベントをwinformsに挿入します。おそらく間違ったイベント(コンストラクタ?)を使用しています。 – Sinatr

+0

もう少し追加することができますか?私はこれに真剣に取り組んでいます。だから私は表示されたイベントを追加する必要がありますか? – Justin

+0

あなたは[more](https://msdn.microsoft.com/en-us/library/86faxx0d(v = vs.110).aspx)を読む必要があります(重要です)。あなたのコードで 'OnLoad'が表示されたら、[' OnShown'](https://msdn.microsoft.com/en-us/library/system.windows.forms.form.onshown(v = vs.110))を上書きしてみてください。 aspx)代わりに。 – Sinatr

答えて

0

この問題はバグであるようです。このバグの

条件:

  • が子FormBorderStylenone
  • に設定されている親FormBorderStyleは、Tab Control又はButtonsとして子フォームに追加none
  • コントロール(すべてのコーナーのボタンを置くために設定されていますフォームが正しくロードされているかどうかを確認します。最初のロード時にフォームの一部が欠落しています。

私が見つけたこの問題を回避するには、FormBorderStylenone以外に設定し、ControlBoxfalseに設定して、コントロールボックスが親MDIフォームに表示されないようにします。

これは誰でもこれを試すのに役立ちます。

関連する問題