邪道な方法
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 件のコメント:
コメントを投稿