2009年11月12日木曜日

MSAccess使いからVB.NETへの道 TextBox中の文字を他のTextBoxにドラッグアンドドロップその1

邪道な方法
Accessの様な行明細で同じ内容の行をコピーして増やしていきたい・・・
そういう要望は多々ある。
作る方はあまりお勧めしない運用であるが、見積の画面となるとそうはいかなくなってくる。
この方法は明細行を1つ1つTextBoxで作成した場合である。
(明細形式のコントロールでは想像着かない為)
そこで少し奮闘してみた。
まずは受ける方のTextBoxプロパティでAllowDropをTrueに必ず変更する。
これをしなければうんともすんとも言わない。

TextBoxのあるフォームに以下のコードを書き込む。

'受ける方のCD TextBox2
Private Sub TextBox2_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles _ TextBox2.DragEnter
'ドラッグされている内容が文字列型に変換可能な場合
If e.Data.GetDataPresent(GetType(String)) Then
'コピーを許可するようにドラッグ元に通知する
e.Effect = DragDropEffects.Copy
End If

End Sub

Private Sub TextBox2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles _ TextBox2.DragDrop

If Me.ActiveControl.Name <> "TextBox1" Then
Me.TextBox2.Text = e.Data.GetData(GetType(String))
End If
End Sub

'ドラッグする方
Private Sub TextBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles _ TextBox1.MouseDown

Me.ActiveControl.DoDragDrop(Me.ActiveControl.Name.ToString, DragDropEffects.Copy)

End Sub

ちなみにこの例はTextBox2の値に"TextBox1"という文字が入る。Me.ActiveControl.Name.ToString を文字として指定しているからである。
Me.ActiveControl.Text.ToStringとすればそのTextBoxの文字をドラッグアンドドロップすることが可能であるが、それでは1つだけがコピーされるだけである。

なのでまずは方法が解ったところで次回その取り回しをリファレンスしたいと思う。

0 件のコメント: