2016-06-19 18 views
-1

親パネル内に移動可能なパネルがあります。私はそれが親パネルから脱落する前に動くのをやめておきたい。これを達成する最良の方法は何ですか?また、パネルを動的に追加します。境界外に出る前にパネルのエッジ検出を停止

更新: 「MyPanel」パネルに入るコードは次のとおりです。 "MyPanel"と "Panel"の違いは、境界線とその移動機能を追加することだけです。 「CoolMove」は私がオンラインで見つけた別の人の回答からのものでした。 MyPanel1をフォームに追加し、別の「MyPanel2」を追加し、「MyPanel1」上にある場合にのみ移動させます。それで、私は "MyPanel2"を "MyPanel1"の範囲内に完全に収めたいと思っています。私はこれを達成するための正しいコードを得るのに苦労しています。

Private allowCoolMove As Boolean = False 
Private myCoolPoint As New Point 
Public Overridable Sub MyPanel_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown 
    'If panel is ontop of Stock panel, then allow manual moving 
    If Me.Parent.Name.StartsWith("S") Then 
     allowCoolMove = True 
     myCoolPoint = New Point(e.X, e.Y) 
     Me.Cursor = Cursors.SizeAll 
     Me.BringToFront() 
    ElseIf Not Me.Parent.Name.Contains("keyR") Then 
     DoDragDrop(Me, DragDropEffects.Move) 
    End If 
End Sub 

Private Sub MyPanel_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove 
    If allowCoolMove = True Then 
     Me.Location = New Point(Me.Location.X + e.X - myCoolPoint.X, Me.Location.Y + e.Y - myCoolPoint.Y) 
    End If 
End Sub 

Private Sub MyPanel_MouseUp(sender As Object, e As MouseEventArgs) Handles Me.MouseUp 
    allowCoolMove = False 
    Me.Cursor = Cursors.Default 
End Sub 

答えて

0

各コントロールは、(パネルのため、内装部品である、)そのクライアント領域の大きさを返しClientRectangle propertyを有しています。 DisplayRectangle propertyもあり、コントロールの領域全体がになっています。

Rectangle構造体にはContains methodオーバーロードがあり、別のRectangle構造体をとり、別の矩形の境界内に完全に1つの矩形が含まれるかどうかを示します。

これらの2つの事実をまとめて、問題を解決するコードを作り出すことができるはずです。次のようなものがあります。

Dim rcParentPanelInterior As Rectangle = parentPanel.ClientRectangle 
Dim rcChildPanel   As Rectangle = childPanel.DisplayRectangle 

If rcParentPanelInterior.Contains(rcChildPanel) 
    ' continue to allow moving 
Else 
    ' forbid moving 
End If 
+0

この問題を解決するには問題があります。私はMouseMoveイベント(これは私の動くコードです)に入れ、動かなくなります。 – goomba454

+0

@ goomba454:新しいコードで質問を更新してください。 –

+0

Ok私は作業しようとしているコードを更新しました。 – goomba454

関連する問題