C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ドラッグ時のGetDataPresentの引数について


(過去ログ 85 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■50676 / inTopicNo.1)  ドラッグ時のGetDataPresentの引数について
  
□投稿者/ door (5回)-(2010/06/14(Mon) 22:33:52)

分類:[.NET 全般] 

こんにちは。よろしくお願いします。

VS2005、C#を使っております。
お絵かきツールのようなものを作成中です。
Shapeという基底クラスがあり、その派生クラスとしてShapeRectangleやShapeCircleなど、
いくつかの形を描画する派生クラスをつくりました。

画面の左側に、ListBoxがあり、"四角形"や"三角形"などがアイテムとして存在します。
そのListBoxから、マウスでドラッグしながら描画キャンバスにマウスポインタを移動した際に、
protected override void OnDragOver(DragEventArgs drgevent)
{
if (drgevent.Data.GetDataPresent(typeof(Shape)))
{
// ドラッグ中の処理
}
}
という記述をしても、ifの中に入ってくれません。
if (drgevent.Data.GetDataPresent(typeof(ShapeRectangle)))
のように、派生クラスを指定した場合はifの中に入ってくれるのですが...。
1つ1つを書くのは面倒なので、
出来れば基底クラスを指定するような記述でとりまとめたいのですが、
良い方法があれば教えてください。
引用返信 編集キー/
■50680 / inTopicNo.2)  Re[1]: ドラッグ時のGetDataPresentの引数について
□投稿者/ Hongliang (648回)-(2010/06/14(Mon) 22:58:01)
2010/06/14(Mon) 23:05:45 編集(投稿者)

DoDragDrop メソッドの第一引数 data に、直接オブジェクトを渡すのではなく、DataObject オブジェクトを渡すようにして下さい。
渡す前に DataObject を new する際に、第一引数 format に任意の適当な文字列を与えます。
ドラッグの受信側は GetDataPresent や GetData の引数に Type ではなく上記で与えた文字列を使用します。
引用返信 編集キー/
■50681 / inTopicNo.3)  Re[1]: ドラッグ時のGetDataPresentの引数について
□投稿者/ すなふきぬ (3回)-(2010/06/14(Mon) 23:00:22)
No50676 (door さん) に返信
> こんにちは。よろしくお願いします。
>
> VS2005、C#を使っております。
> お絵かきツールのようなものを作成中です。
> Shapeという基底クラスがあり、その派生クラスとしてShapeRectangleやShapeCircleなど、
> いくつかの形を描画する派生クラスをつくりました。
>
> 画面の左側に、ListBoxがあり、"四角形"や"三角形"などがアイテムとして存在します。
> そのListBoxから、マウスでドラッグしながら描画キャンバスにマウスポインタを移動した際に、
> protected override void OnDragOver(DragEventArgs drgevent)
> {
> if (drgevent.Data.GetDataPresent(typeof(Shape)))
> {
> // ドラッグ中の処理
> }
> }
> という記述をしても、ifの中に入ってくれません。
> if (drgevent.Data.GetDataPresent(typeof(ShapeRectangle)))
> のように、派生クラスを指定した場合はifの中に入ってくれるのですが...。
> 1つ1つを書くのは面倒なので、
> 出来れば基底クラスを指定するような記述でとりまとめたいのですが、
> 良い方法があれば教えてください。

試してないので、答えになるかどうかわからないですが、以前Clipbord関係のGetDataPresentで似たような問題があったので、その時の解決方法を書いておきます。

1つは基底クラス、継承先にSerialize属性を持たせておくこと。
もひとつはディープコピーを生成したい場合は、独自のCloneメソッドを実装(シャローコピーの場合は問題なかったような記憶があります。)

クリップボードにしても、ドラッグの機能にしてもDDEの流れをくんできてるだろうから、内部処理は共通する部分もあるのかも。
引用返信 編集キー/
■50684 / inTopicNo.4)  Re[2]: ドラッグ時のGetDataPresentの引数について
□投稿者/ door (7回)-(2010/06/14(Mon) 23:20:17)
Hongliang さん、すなふきぬ さん
返信ありがとうございます。
DataObjectでいけそうな気がします。
ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -