0

子Formオブジェクトを含むPanelを備えたアプリケーションがあります。子フォームの1つをクリックすると、前面に表示されます。今、どれが前にあるのか知りたいのですが…イベントリストを調べましたが、目的の適切なイベントが見つかりません:(

これらの方法は機能しません:

    protected void OpenedFileForm_Enter(object sender, EventArgs e)
    {
        MessageBox.Show("enter");
    }

    protected void OpenedFileForm_Click(object sender, EventArgs e)
    {
        MessageBox.Show("click");
    }

    protected void OpenedFileForm_Activated(object sender, EventArgs e)
    {
        MessageBox.Show("activated");
    }

    protected void OpenedFileForm_MouseClick(object sender, MouseEventArgs e)
    {
       MessageBox.Show("mouse click");
    }

    protected void OpenedFileForm_Shown(object sender, EventArgs e)
    {
        MessageBox.Show("shown");
    }

ここに画像の説明を入力してください

        OpenFileDialog openFile1 = new OpenFileDialog();

        openFile1.DefaultExt = "*.txt";
        openFile1.Filter = "TXT Files|*.txt|RTF Files|*.rtf";

        if (openFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK &&
           openFile1.FileName.Length > 0)
        {

            switch (Path.GetExtension(openFile1.FileName))
            {

                case ".txt":
                    txtForm childTXT = new txtForm();
                    this.childForms.Add(childTXT);
                    childTXT.Parent = this.mainPanel;              
                    childTXT.richTextBox1.LoadFile(openFile1.FileName, RichTextBoxStreamType.PlainText);                                               
                    childTXT.Show();
                    break;
            }


        }
4

3 に答える 3

1

Form.Activatedイベントを試しましたか?

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.activate(v=vs.80).aspx

編集:

MDIアプリケーションを使用している場合は、MdiChildActivate代わりに使用する必要がある場合があります。

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.mdichildactivate.aspx

于 2012-11-25T15:04:27.253 に答える
1

このコードは、Form.TopLevel プロパティを false に設定した場合にのみ機能します。これにより、UserControl とほとんど区別がつかない子コントロールになります。

これには多くの副作用があります。その 1 つは、「フロント」という概念がなくなったことです。子コントロールの Z オーダーは、親の Controls コレクション内の位置によって決まります。また、起動するイベントに影響し、Activated および Deactivated は起動しません。さらに、Form クラスはコンテナー コントロールとして設計されているため、フォーカス自体を取得することは好きではありません。その子コントロールがフォーカスを取得します。Form クラスはフォーカスを使用しません。これが、フォーカスが必要なイベントであるため、Enter、Click、および MouseClick イベントが発生しない理由です。

簡単に言えば、あなたがやろうとしていることは、まったく意味がありません。厳密に修正したい Z オーダーである場合は、MouseDown イベントのイベント ハンドラーを記述します。

    void OpenedFileForm_MouseDown(object sender, MouseEventArgs e) {
        var frm = (Form)sender;
        frm.BringToFront();
    }

Enter イベントを発生させるために frm.Select() を追加できますが、フォームにフォーカス可能なコントロール自体が含まれていない場合にのみ実行してください。コードでイベントを正しく割り当てていないという証拠があることに注意してください。Shown イベント発生します。FormBorderStyle を None に設定することも重要です。タイトル バーはアクティベーション ステータスを示すことができなくなります。

于 2012-11-25T16:04:00.747 に答える
0

わかりました、これを手に入れました!みんな助けてくれてありがとう。パネルが他のフォームの親であるという私の奇妙な MDI アイデアの公平性について考えるヒントをくれました。パネルを含む SplitContainer を削除し、フォームがメイン フォームの MDIChildren である標準の MDI アプリケーションを実行しました。childTXT.MdiParent = これ;

于 2012-11-25T15:48:06.730 に答える