2012-01-07 19 views
1

私はMDIフォームといくつかの子ウィンドウを持っています。 MDIのさまざまな領域に子ウィンドウをドッキングしますが、フォーカスが各フォームで失われると、他のドッキングされたフォームが並べ替えられ、すべてが爆発するようになります。混乱の疑問のために私は反応を示すために一連の画像を用意しました。MDIフォームにドッキングする子ウィンドウ

Image1の、前に任意のフォームをクリックしてください:

enter image description here

Image2の、W2をクリックした後:

enter image description here

最も左側のウィンドウにフォーカスを取得ドッキングしたときに違いがありますW1ウィンドウに言及しなくても、MDIウィンドウの右端にサイズが変更されます。

この問題を解決するにはどうすればよいですか?ありがとう。

+0

MDIとドッキングは対角線であるため、ウィンドウ処理モデルは重なった子どもを強く支持します。 20年前にユーザーが640 x 480の解像度のモニターを持っていたときに、多くの意味がありました。 http://sourceforge.net/projects/dockpanelsuite/のようなドッキングライブラリを使用してください –

+0

私はそれが正しい方法ではないことを知っていますが、私は試してみたかったのです。私はdockpanelsuitで働いた、それは素晴らしいですが、私は自分自身のものでより快適です。返信ありがとう。 – MahanGM

+0

さらに、MDIの使用を中止してください。ハンスの言葉通り、ドッキング用に設計されたものではなく、いつまでもあなたと戦うつもりです。あなた自身の車輪を発明したいなら、MDIスタイルを落として、通常のドッキング子を使うだけで、はるかに簡単になるでしょう。 –

答えて

0

子フォーム(W2)のサイズ変更メソッドで自分でサイズを修正しようとしましたか?

//something like this 
    private void W2_Resize(object sender, EventArgs e) 
    { 
     Size pSize = this.ClientSize; 
     // Resize the form 
    } 

または、Focusメソッドを使用してください。 しかし、それはperfomenceの問題を引き起こすかどうかわかりません。

+0

私は以前のスタイルにとどまるとは思っていませんでした。私は試してみます。 – MahanGM

1

これには別の修正があります。非常に高速な例は次のようになります。

  • 新しいウィンドウフォーム(Form1)を作成します。 isMidiContainerプロパティをtrueに設定します。
  • これでパネル(Panel1)をドロップし、ドックプロパティをrightに設定してから幅を設定します。
  • フォーム上に別のパネル(panel2)をドロップし、そのドックも同様に設定します。今、これらの2つのパネルは互いに隣り合っています。

2つの新しいウィンドウフォーム(フォーム2とフォーム3)を作成します。

さて、Form1のメイン、ただのInitializeComponent(下)に追加:

Form2 f2 = new Form2(); 
f2.TopLevel = false; 
f2.Dock = DockStyle.Fill; 
panel1.Controls.Add(f2); 
f2.Show(); 

Form3 f3 = new Form3(); 
f3.TopLevel = false; 
f3.Dock = DockStyle.Fill; 
panel2.Controls.Add(f3); 
f3.Show(); 

は、これは少し違ったアプローチであるが、それはうまく動作するはずです。

+0

この長い時間後にお返事ありがとうございます。今月初めにForm.TopLevelについて学びましたが、この問題は解決しました。 – MahanGM

+0

クールな豆。他の人は同じ問題があるかどうかを知ることができます:)。 –