私は見て、見て、答えを見つけることができません。
私は持っていTreeView
ます。ツリー内でノードを移動できるようにするためのドラッグアンドドロップがあります。
ドラッグアンドドロップを、アプリケーションの単一インスタンス内のその1つのコントロール内でのみ機能するように制限したいと思います(アプリケーション自体は複数のインスタンスを実行できます)。
私は次のことを試しました:
private void SubFolderTreeView_DragEnter(object sender, DragEventArgs e)
{
TreeView source = sender as TreeView; // also tried = (TreeView) sender;
if (source == this.SubFolderTreeView && e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
e.Effect = DragDropEffects.Move; // Okay, set the visual effect
else
e.Effect = DragDropEffects.None; // Unknown data, ignore it
}
TreeView
残念ながら、同じアプリケーションの2番目のインスタンスは、そのアプリケーションから最初のTreeViewにドラッグできます(source == this.SubFolderTreeView)
。true
まったく異なるツリービューが私のものにドラッグできるかどうかはテストしていませんが、疑わしいですが、上記の動作はすでに失敗しています。
他のことを試しました-フォームやコントロールのハンドルを比較しても機能しませんでした
bool isSameForm = ((MyForm) source.TopLevelControl == this); // still true
bool isSameHandle = (((Control)source).Handle == ((Control)this.SubFolderTreeView).Handle); // still true
私が考えることができる他の唯一のことは、TreeViewまたはFormに格納されている乱数(おそらく機能しない)と、コントロールの絶対画面位置をチェックすることです(最良の方法ではありません)。
もちろん、アプリケーションにミューテックスを貼り付けることもできるので、1つのインスタンスのみを実行できますが、実行したくありません。
誰かがこれを行うための良い方法を提案できますか?