さまざまな種類の子ウィンドウを開くことができる MDI アプリケーションがあります。同じ種類の子ウィンドウの複数の (ただし異なる) インスタンスを開くことができます。(例: 子ウィンドウ タイプ A の 3 つのインスタンスと子ウィンドウ タイプ B の 2 つのインスタンスを開くことができます。5 つのウィンドウはすべて別個のエンティティであり、ユーザーが同じデータを明示的に複数のウィンドウにドラッグしない限り、データを共有しません。) 各子ウィンドウ1 つ以上の ToolStrips を持つ ToolStripContainer があります。どうすれば防ぐことができますか:
- ユーザーがタイプ A の子ウィンドウからタイプ B の子ウィンドウの ToolStripContainer に ToolStrip をドラッグすることから?
- ユーザーは、子ウィンドウ A の 1 つのインスタンスから同じタイプのウィンドウの別のインスタンスの ToolStripContainer に ToolStrip をドラッグすることはできませんか?
ユーザーがタイプ A のインスタンス 1 からタイプ A のインスタンス 2 に ToolStrip をドラッグし、インスタンス 2 でいくつかのものを選択してから、ツールバーのボタンをクリックして、他のウィンドウに奇妙なことが起こるのを防ごうとしています。 . 同様に、タイプ A のウィンドウからタイプ B のウィンドウに ToolStrip をドラッグするのは意味がありません。アクションはそのタイプには適用されませんが、ユーザーにはすべて問題ないように見えます。ドラッグ。
ControlAdded イベントに独自のハンドラーを追加するのと同じくらい簡単ですか、それとももっと良い方法がありますか? .NET 3.0 で WinForms を使用しています。
編集:再現手順
- 新しい Windows アプリケーション プロジェクトを作成します。
- 新しいユーザー コントロールを追加します。1 つのボタンを持つ 1 つの ToolStrip を含む ToolStripContainer をコントロールに与えます。
- 手順 2 を繰り返して、UserControl2 クラスを作成します。
- ソリューションをコンパイルして、UserControl1 と UserControl2 がツールボックスに表示されるようにします。
- UserControl1 と UserControl2 をフォームにドラッグします。境界線がどこにあるかがわかるように境界線を設定します。
- アプリを実行します。
- ToolStrip を UserControl1 のコンテナーからドラッグして、UserControl2 のコンテナーにドロップできるようになりました (UC1 にゼロの ToolStrips と UC2 に 2 つの ToolStrips を残します)。
- ここで、UserControl1 のコードにしかアクセスできないとします。ユーザーが ToolStripContainer のインスタンスから ToolStrip をドラッグできないようにするにはどうすればよいですか?