投稿者 魔界の仮面弁士  (社会人) 投稿日時 2016/10/11 22:52:01
> テキストボックス等のコントロールを
テキストボックスに対するドラッグ操作は、本来ならば文字列選択のために使われるものですよね。
ドラッグ操作を組み込むなら、別のコントロールに仕掛けた方が良いと思いますよ。たとえば Label とか。


> TextBox1.Location = Point.op_Subtraction(Me.PointToClient(System.Windows.Forms.Cursor.Position), StartPositon)
VB.NET 2002/2003 をお使いでしょうか? VB2005 以降では、
op_Subtraction メソッドの代わりに - 演算子を使います。具体的にはこんな感じ。

TextBox1.Location = Me.PointToClient(System.Windows.Forms.Cursor.Position) - StartPositon



> コントロールの開始位置から同じX方向か同じY方向にしか移動できないようにしたい。
Location プロパティではなく、Left プロパティや Top プロパティを使ってみてください。

'TextBox1.Location = Me.PointToClient(System.Windows.Forms.Cursor.Position) - StartPositon 
'TextBox1.Left = (Me.PointToClient(System.Windows.Forms.Cursor.Position) - StartPositon).X 
TextBox1.Top = (Me.PointToClient(System.Windows.Forms.Cursor.Position) - StartPositon).Y


ただし今のままのコードだと、フォームの端を超えて移動できてしまいますので、
算出した座標の値を調べて、必要以上に移動されないようにしておいた方が良いでしょう。


> Ctrlキーでのコピー処理をしたい。
Ctrl が押されているかどうかは、ModifierKeys プロパティで分かります。
どの時点でコピーするのかも、仕様として定めておいた方が良いかもしれませんね。


(案1) ドラッグを開始した時点でコピーを作り、
ドラッグ中はそのコピーを移動させる。

(案2) ドラッグが完了した時点でコピーを作り、
ドロップされた位置にそのコピーを配置する。