- 締切済み
.NETのフォームの上のコントロールについて
ドラッグで移動可能なFormを作成しようとしています。 Formの上には3つほどPictureboxがFormギリギリの大きさまで埋め尽くしています。 なので、クリックでFormを選択することは出来ません。 この状態でFormのMouseDownイベントを使用することは可能でしょうか? 実質、FormではなくPicturebox1~3をクリックしていることになるのは理解しています。 その状態でフォームごとドラック可能にする方法があれば教えて下さい。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- angel_Z
- ベストアンサー率66% (12/18)
こんにちは。 こんな感じでどうでしょうか? Form内のコントロール全てのMouseMoveイベントが発生します。 Public Class Form1 Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _ (ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, _ ByVal lParam As Integer) As Long Private Declare Sub ReleaseCapture Lib "user32.dll" () Const WM_NCLBUTTONDOWN = &HA1 Const HTCAPTION = 2 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call All_MouseMove(Me) End Sub Private Sub All_MouseMove(ByVal ctrl As Control) 'ctrlに1つ以上の子コントロールが格納されている時 If ctrl.HasChildren Then Call Event_Set(Me) End If End Sub Private Function Event_Set(ByVal Ctrl As Control) As Control() Dim buf As ArrayList = New ArrayList 'Ctrl内の全てのコントロールを列挙する For Each C As Control In Ctrl.Controls '親から子、孫まで取得 buf.Add(C) '末尾に追加 buf.AddRange(Event_Set(C)) 'コントロール名の取得 'イベントAllControl_MouseMoveのセット AddHandler C.MouseMove, AddressOf AllControl_MouseMove Next Return CType(buf.ToArray(GetType(Control)), Control()) '配列格納 End Function 'Form1の子、孫コントロール全てのMouseMoveイベントが発生する Private Sub AllControl_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) 'Form1_MouseMoveイベントを呼び出す Call Form1_MouseMove(sender, e) End Sub Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove If e.Button = Windows.Forms.MouseButtons.Left Then Call ReleaseCapture() Call SendMessage(Me.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0&) End If End Sub End Class
お礼
できました!!感激です!! ありがとうございます。