2

重複の可能性:
WinFormsフォームを「ドッキング」/添付する方法

MainFormとPanelFormの2つのフォームがあります。

PanelFormがMainFormと一緒に移動するように、MainFormのOnMoveをオーバーライドして、PanelFormがMainFormにアタッチされるように設定しました。これは、PanelFormがMainFormのパネルであることをシミュレートするためのものです。

MainFormからPanelFormをドッキングおよびドッキング解除したり、折りたたんだりすることができます。

問題は、MainFormを最小化するか、他のアプリケーションへのフォーカスを失い、MainFormに戻るときに、PanelFormを手動でAlt-Tabキーを押す必要がある場合です。

アタッチされていることをシミュレートするためにOnMoveやその他のものをオーバーライドせずに、PanelFormをMainFormにアタッチする方法はありますか?

4

2 に答える 2

1

同時に 2 つの「アクティブな」フォーム/ウィンドウを持つことはできません。ただし、メイン ウィンドウをアクティブにすることで、1 つまたは複数のウィンドウを前面に表示できます。これを行うには、Form.Show(ownerForm)オーバーライドを使用します。

于 2012-07-16T19:48:55.323 に答える
0

形の本質を体験しているようですね。それらは本質的に独立しています。おそらく、以前に非表示にした後 (最小化/その前に別のウィンドウ) にしたいときに両方のフォームが表示されるようにするためにすべきことは、両方に連続してフォーカスを設定することです。

編集 すでに答えを見つけたようですが、これもうまくいく可能性があります。ただし、受け入れられた回答ほどきれいではありません。両方のフォームでそれを行うだけです。

Timer timer;
bool resetting = false;
Form2 frm2;
public Form1()
{
    InitializeComponent();
    frm2 = new Form2();
    frm2.Show();
    timer = new Timer();
    timer.Interval = 50;
    timer.Tick+=new EventHandler(timer_Tick);
}
private void timer_Tick(object sender, EventArgs e)
{
    timer.Stop();
    resetting = false;
}

private void Form1_Activated(object sender, EventArgs e)
{
    if (!resetting)
    {
        timer.Start();
        frm2.Focus();
        this.Focus();
        resetting = true;
    }
}
于 2012-07-16T19:44:48.847 に答える