トップ回答者
実行時におけるコントロールのDragによるサイズ変更方法について

質問
-
Expressでない方のフォーラムでも聞いておりましたが、まだわかりません
でした。こちらでもお聞きしますがよろしくお願いします。実行時におけるコントロールのDragによるサイズ変更方法について
お尋ねします。SplitContainerの場合は、同一コントロール内での間仕切り
位置の変更という形、またSplitterコントロールを利用する方法もDocking
されたコントロール間の間仕切りとしての利用法はHelpにも書かれていました。VB6.0では、例えばLabelコントロールなどを利用し、単独でサイズ変更したい
コントロールのBorderの一辺におき、それをDragすることでMouseの位置変更
情報を読み取り、その情報から該当のコントロールのサイズ変更を行なうと
いった方法を使っておりました。VB.NETまたはVB2005以降でもやはり上記のようにVB6.0で行なっていた
ような方法による以外にはないでしょうか?それとも、もっと楽にできる方法があればと思いました。たとえばビルトイン
されているスマートな方法が実装されていたりするとだいぶ助かるのですが、
そういったものはすでにあるでしょうか。よろしくお願いします。
(こちらでわかりましたらExpressでない方のフォーラムに投稿したものは
削除します、すみませんがよろしくお願いします)
回答
-
有用なコードをご指導下さりうれしく思います。ありがとうございます。
派生コントロールにしてそこへ実装する方法はこのようにするのですね。
とても参考になりました。現在まだこの方法を試すには至っていませんでしたが、この実装の仕方と、
2chで教えて頂いた内容も参考に該当するイベントに対する動作をユーザー
コントロールのPublicメソッドにし、それらをそのコントロールを貼り付けた
Formの側でコントロールのイベントを検知した時に明示的にコールする
方法でとりあえずできればと思いました。また努力してみます。具体的なご指導、大変ありがとうございました!!
すべての返信
-
本件は2chの「プログラム板」で教えて頂きましたが、別法のコードによる
コントロールを示して頂きました。
http://pc10.2ch.net/test/read.cgi/tech/1161250878/834-850
ここから修正発展して自分の使いたい形式に取り込むことができるもの
と思われました。あちらにもたくさんの手練の方がいらっしゃるので
大変心強く思っておりました。それではまた別件でも何卒よろしくお願い致します。
※追伸ですが、この件はこちらのフォーラムではご教示、ご指導等頂けません
でしたので、やはりマイクロソフトのControlクラスのネイティブの機能にはないもの
だったようですが、あると便利な機能ではないかと思いました。 -
2chの方でも書かれていますが、簡単にはいかないようで、ある程度のコーディングが必要になります。
参考までに、ちょこっと書いてみました。本当に動く最低限のコードですが(^^;Public Class PictureBoxSizeable
Inherits System.Windows.Forms.PictureBoxDim dragging As Boolean = False
Dim nowPt As Point
Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then
dragging = True
End If
MyBase.OnMouseDown(e)
End Sub
Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs)
dragging = False
Dim newWidth As Integer = nowPt.X
Dim newHeight As Integer = nowPt.Y
If newWidth > 10 Then Me.Width = newWidth
If newHeight > 10 Then Me.Height = newHeight
MyBase.OnMouseUp(e)
End Sub
Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs)
nowPt = New Point(e.X, e.Y)
MyBase.OnMouseMove(e)
End Sub
End Class
-
有用なコードをご指導下さりうれしく思います。ありがとうございます。
派生コントロールにしてそこへ実装する方法はこのようにするのですね。
とても参考になりました。現在まだこの方法を試すには至っていませんでしたが、この実装の仕方と、
2chで教えて頂いた内容も参考に該当するイベントに対する動作をユーザー
コントロールのPublicメソッドにし、それらをそのコントロールを貼り付けた
Formの側でコントロールのイベントを検知した時に明示的にコールする
方法でとりあえずできればと思いました。また努力してみます。具体的なご指導、大変ありがとうございました!!