0

Weifen Lous の Dock Panel Suite を使用しています。私のコードでは、アプリケーションのメイン フォームにドッキングするテキスト エディター用のフォームの新しいインスタンスを作成しています。MDI 親子スタッフ。フォームのインスタンスを保持する変数を再初期化するたびに問題が発生します。

これが私のコードです:

Private Sub AddTabPage()

        Try

            Editor = New frmEditor
            Editor.Text = "New Tab"
            Editor.Show(dpMain, DockState.Document)

        Catch ex As Exception

            MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Information)

        End Try

    End Sub

ご覧のとおり、上記のコードは、ユーザーがテキスト エディターにタブを追加することを決定するたびに呼び出されます。コードが行うことは、アプリケーションのメイン フォームにドッキングされるフォームの新しいインスタンスを作成することです。

問題はここにあります:

Private Sub Editor_ColorToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Editor_ColorToolStripMenuItem.Click

    Dim CR As New ColorDialog
    CR.ShowDialog()
    CType(Editor.rtbCode, RichTextBox).SelectionColor = CR.Color

End Sub

上記のツール ストリップ メニュー項目では、AddTabPageサブルーチン ( CType(Editor...) を使用して作成したフォーム変数を呼び出しています。フォームが 1 つしかない場合、これは問題なく機能します。しかし、別のタブを追加しようとすると; つまりAddTabPage、フォーム変数を再初期化する をもう一度呼び出すとEditor、以前に作成したタブ/フォーム (最初のタブ/フォーム) に書かれたテキストの色を変更できなくなりました。Editorこれは、フォームを追加するたびに が再初期化されるために発生すると考えられます。前に作成したタブ/フォームのデータ/コントロール (最初のタブ/フォーム) が失われていますか? よくわかりませんが、そのようなことが起こります。

今、私が達成したいのは、タブ/フォームを作成するたびに、作成するすべてのタブに書かれたテキストの色を変更できることです。前のフォームのデータ/コントロールが上書き/削除されないようにするにはどうすればよいですか (申し訳ありませんが、使用する適切な用語がわかりません)。

定義済みの数のフォーム変数を宣言してから、switch ステートメントを使用して現在フォーカスされているフォームを決定することで、問題を解決できます。しかし、これを行うにはもっと良い方法があると思います。ドック パネルに無制限のタブ/フォームが必要です。

4

1 に答える 1

0

どうでも。問題を解決しました。

ドッキングしたいフォームにアクセスするには、次のコードを使用しました。

dpMain.ActiveDocument.DockHandler.Form.Controls.Item(0)

そうすれば、明示的に使用する義務はありませんEditor

編集:

Item(0)RichTextBoxフォーム内の a のインデックスです。

于 2013-03-27T21:46:42.113 に答える