DOBON.NET DOBON.NETプログラミング掲示板過去ログ

RichEditBox でドラッグアンドドロップ

環境/言語:[VS2010 C# ウインドウズアプリ windows 7/Vista]
分類:[.NET]

RichEditBox で Drag&Drop を行いたくネットのページを参考にして下記のようにしました。
とりあえず、Drag&Drop 様の動作をしていますが、DragDropEffects.Move としてその文字を同じコントロール内で移動したいのですがコピーされてしまいます。

この動作は、自動で処理されないのでしょうか?
DragDropEffects.Copy と Move の違いは、カーソルの形状ぐらいなのでしょうか?

コード
private void syntaxRichTextBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text){
e.Effect = DragDropEffects.Move; //.Copy;
else
e.Effect = DragDropEffects.None;
}
private void syntaxRichTextBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
int i;
string s;

// Get start position to drop the text.
i = syntaxRichTextBox1.SelectionStart;
s = syntaxRichTextBox1.Text.Substring(i);
syntaxRichTextBox1.Text = syntaxRichTextBox1.Text.Substring(0, i);

// Drop the text on to the RichTextBox.
syntaxRichTextBox1.Text = syntaxRichTextBox1.Text + e.Data.GetData(DataFormats.Text).ToString();
syntaxRichTextBox1.Text = syntaxRichTextBox1.Text + s;
}

また、上記でe.Data.GetData(DataFormats.Text).ToString();があるとその文字が2つ表示されてしまいます。実際に今テストしている時は、コメントにしていますが、実際、不要なコードですか?それとも何か不思議な個所がありますか?

実際は、下記でテスト中
syntaxRichTextBox2.Text = syntaxRichTextBox2.Text;// +e.Data.GetData(DataFormats.Text).ToString(); //<- これがあると移動した文字が2重になる

syntaxRichTextBox1というのは、CodeProject にあったコードで
namespace SyntaxHighlighter
{
  public class SyntaxRichTextBox : System.Windows.Forms.RichTextBox
{
:
:
登録してある単語が入力されたら、文字の色を変えるというものです。
ちょうど、VS2010で、private void などのキーワードが青色になる機能を追加したものです。
RichEditBoxやSyntaxRichTextBoxは知りませんが、RichTextBoxならEnableAutoDragDropをTrueにするだけでDrag&Dropできます。
■No28963に返信(jijiさんの記事)
> RichEditBoxやSyntaxRichTextBoxは知りませんが、RichTextBoxならEnableAutoDragDropをTrueにするだけでDrag&Dropできます。

お世話になります。

確かに、おっしゃる通りの処理、DragEnter() DragDrop() の処理なしでsyntaxRichTextBox1.EnableAutoDragDrop = true; のみでDrag&Dropできました。

最初、texoBox のように作成するものと思い、ネットをあさっていたら下記のサイトを見つけそのようにするものと思い試しました。

http://msdn.microsoft.com/ja-jp/library/fkw1hc6t.aspx

とすると、上記の説明は、何のための説明?というかコードでしょうか?
マイクロソフトが意味もなく載せるとは思えませんが
> とすると、上記の説明は、何のための説明?というかコードでしょうか?
EnableAutoDragDropの動作が気に入らない場合や、機能を追加したい場合には必要でしょう。
また、手慣れた人ならEnableAutoDragDropの動作を検証するより、自分で書いたほうが早いかもしれません。
本当の理由は「中の人」しかわかりませんが、Auto云々が嫌いな人かもしれません。
> また、手慣れた人ならEnableAutoDragDropの動作を検証するより、自分で書いたほうが早いかもしれません。
> 本当の理由は「中の人」しかわかりませんが、Auto云々が嫌いな人かもしれません。
なるほど、確かに追加ハンドラで細工できそうですね。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板