- - PR -
textBoxのドラッグ&ドロップ
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-04-07 11:01
textBoxの選択された文字列をドラッグしたいのですが、
MouseDownイベントでDoDragDropメソッドを呼び出すと選択状態が解除されてしまうためうまくいきません。 解決方法をご存知の型がいらっしゃいましたら教えてくださいませんか? private void TextBox_MouseDown(object sender, MouseEventArgs e) { TextBox target = (TextBox)sender; if(target.SelectionLength != 0){ target.DoDragDrop(target.SelectedText,DragDropEffects.Copy); } } private void TextBox_DragEnter(object sender, DragEventArgs e) { if(e.Data.GetDataPresent(DataFormats.Text)){ if(e.KeyState == (int)Keys.Control){ e.Effect = DragDropEffects.Copy; } else{ e.Effect = DragDropEffects.Move; } } else{ e.Effect = DragDropEffects.None; } } private void TextBox_DragDrop(object sender, DragEventArgs e) { TextBox target = (TextBox)sender; target.SelectedText = (string)e.Data.GetData(DataFormats.Text); } [ メッセージ編集済み 編集者: カズ 編集日時 2005-04-07 11:01 ] | ||||||||
|
投稿日時: 2005-04-07 15:31
普通の動作ですよね。(右クリックなら平気かも?)
データを渡す側ですか?受け取る側ですか?(両方が混ざってる感じ) 一応 http://ukamen.hp.infoseek.co.jp/Programming1/DragAndDrop/#SEC5 | ||||||||
|
投稿日時: 2005-04-08 23:58
VS.NETのコードエディタのような動作をさせたいのですが…
両方なのです。受け取ることもあれば渡すこともあるので… | ||||||||
|
投稿日時: 2005-04-09 01:41
MouseDownでドラッグ開始するから範囲選択できなくなるので不便だと思いますが、
たとえば、 MouseMoveでSelectionStartとSelectionLengthを覚えといてMouseDownでSelectする。 私だったら右クリックドラッグで対応させますけどね。それかボタンを押させる。 #コードエディタは範囲選択されている場合、マウスのボタンを押してから離すまでの #長さによって動作が違っているような気がします。 | ||||||||
|
投稿日時: 2005-04-09 11:47
確かにそれは不便ですね… ドラッグ&ドロップは必須の機能ではないので、どうしてもうまくいかないようなら諦めます。 べるさん、丁寧な回答ありがとうございました。 | ||||||||
|
投稿日時: 2005-04-09 13:26
VS.NET使ってないから勘違いしてるかもしれないけど textBoxの回りに、少しつかめる領域、というかミミみたいな部分があったりしませんか? dragableTextBoxなんて名前を付けて、移動できるクラスにしてしまうというのはどうでしょう? | ||||||||
|
投稿日時: 2005-04-09 14:22
勘違いかと。>冬寂さん
wordpadにこの機能がある(XPで確認)ので試してみるといいかも。 wordpadを二つ起動し、そのうちの一つで範囲選択した後、その選択部分の上でMouseDown、そのまま別のwordpadにもっていってMouseUpしてみてください。同じwordpadの中でも移動できます。 ところで、wordpadにこの機能があるので、RichTextBoxにもあるんじゃないだろうか…と思ってやってみたらDnDは出来るようですけど、自コントロール内、ほかのコントロールともに落とせません。 なにかフォーマットが変なのか変な動作がはいっているのか…。 | ||||||||
|
投稿日時: 2005-04-10 13:16
試しにRichTextBoxを継承するクラスを作ってOnDragEnterとOnDragDropをオーバーライドしてみたら、2回に1回ドラッグ&ドロップができるという変な状況になりました。 ドラッグ&ドロップを実装するのは諦めかけてますが、どうなってるのかが気になります… |
1