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 ステートメントを使用して現在フォーカスされているフォームを決定することで、問題を解決できます。しかし、これを行うにはもっと良い方法があると思います。ドック パネルに無制限のタブ/フォームが必要です。