- PR -

リッチボックスのマウスで文字を移動

1
投稿者投稿内容
seltzer
会議室デビュー日: 2003/07/18
投稿数: 8
投稿日時: 2003-10-13 10:17
教えて下さい。

ワードパッドやワードなので、文字を選択した状態でそれをマウスでドラッグすると、「切り取り」「貼り付け」をしたのと同じような効果を得ることが出来ますよね。

あれを、C# のリッチテキストボックスコントロールで再現したいのですが、うまく行きません。まず、DragOverや DragDropイベントが定義されていないみたいで、リストに出てきませんでした。

これは、検索サイトを探ってみたら手で書いてやれば、定義できることが分かりました。(ってそんなことってあるんですか!?)

で、以下のようなコードを記述しました。

private void textDoc_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
  if (e.Data.GetDataPresent("Text"))
  {
    e.Effect = DragDropEffects.Move;
  }
}

private void textDoc_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
  if((Control.MouseButtons & MouseButtons.Left) != MouseButtons.Left)
  {
    textDoc.SelectedText = e.Data.GetData("System.String", true).ToString();
  }
}

ほとんどうまく動くのですが、唯一元々あった場所の文字が消えてくれないのです。
.Moveメソッドを使っているので、「移動」するはずなのですが、残ってしまいます。
DragOverメソッドで、マウスのキーが押されていないときに SelectedTextを削除するというのも試してみたのですが、その後の挙動が変な場所に張り付いてしまうという感じでなかなかうまく行きません。

また、少しこいつは不安定で、うまくドラッグが開始されるときとされないときがあります。選択した直後に移動させようとするとうまく行かないようです。

何か情報をご存じでしたら、教えて頂ければ幸いです。
1

スキルアップ/キャリアアップ(JOB@IT)