トップ回答者
typeof()に関して

質問
-
typeof()に関して質問させて頂きます。
TreeViewコントロールに登録するノードに数種類のノードがあり、
public NODE_A : TreeNode{}
public NODE_B : TreeNode{}
public NODE_C : TreeNode{}のようにTreeNodeを継承した新しいノードクラスを作りました。
しかし、ドラッグ&ドロップ処理の
private void DragEnter( object sender, DragEventArgs e )
{
if( e.Data.GetDataPresent( typeof(TreeNode) ) ) e.Effect = DragDropEffects.Move;
else e.Effect = DragDropEffects.None;
}のtypeof(TreeNode)で必ず失敗するようになってしまいました。
根本的に考えている事が間違っているのかもしれませんが
typeof(TreeNode)はTreeNodeから継承したクラスでもNGになるのでしょうか?
回答
-
データを設定するときの話です。DoDragDrop の呼び出し時ですね。
設定時のを私の前のレスで書いたように変更すれば、DragEnter や DragDrop の時のコードの変更は不要でしょう。
と書いてから思い出しました。
DoDragDrop には IDataObject じゃなくても渡せるんでしたっけ。
DoDragDrop 時に、DataObject を new し、その DataObject に SetData で TreeNode を追加しておきます。
で、DoDragDrop にはこの DataObject を渡すようにしてください。- 回答としてマーク WORST_7 2009年10月7日 12:33
すべての返信
-
データを設定するときの話です。DoDragDrop の呼び出し時ですね。
設定時のを私の前のレスで書いたように変更すれば、DragEnter や DragDrop の時のコードの変更は不要でしょう。
と書いてから思い出しました。
DoDragDrop には IDataObject じゃなくても渡せるんでしたっけ。
DoDragDrop 時に、DataObject を new し、その DataObject に SetData で TreeNode を追加しておきます。
で、DoDragDrop にはこの DataObject を渡すようにしてください。- 回答としてマーク WORST_7 2009年10月7日 12:33
-
以下のようにして旨くいきました。
・・・問題ないかな?
private void ItemDrag( object sender, ItemDragEventArgs e )
{
TreeNode treenode = e.Item as TreeNode;
if( treenode != null )
{
if( treenode.Parent == null )
return;
DataObject dataobject = new DataObject();
dataobject.SetData( typeof(TreeNode), e.Item );
this.DoDragDrop( dataobject, DragDropEffects.All );
}
}