none
実行時におけるコントロールのDragによるサイズ変更方法について RRS feed

  • 質問

  • Expressでない方のフォーラムでも聞いておりましたが、まだわかりません
    でした。こちらでもお聞きしますがよろしくお願いします。

    実行時におけるコントロールのDragによるサイズ変更方法について
    お尋ねします。SplitContainerの場合は、同一コントロール内での間仕切り
    位置の変更という形、またSplitterコントロールを利用する方法もDocking
    されたコントロール間の間仕切りとしての利用法はHelpにも書かれていました。

    VB6.0では、例えばLabelコントロールなどを利用し、単独でサイズ変更したい
    コントロールのBorderの一辺におき、それをDragすることでMouseの位置変更
    情報を読み取り、その情報から該当のコントロールのサイズ変更を行なうと
    いった方法を使っておりました。

    VB.NETまたはVB2005以降でもやはり上記のようにVB6.0で行なっていた
    ような方法による以外にはないでしょうか?

    それとも、もっと楽にできる方法があればと思いました。たとえばビルトイン
    されているスマートな方法が実装されていたりするとだいぶ助かるのですが、
    そういったものはすでにあるでしょうか。

    よろしくお願いします。
    (こちらでわかりましたらExpressでない方のフォーラムに投稿したものは
    削除します、すみませんがよろしくお願いします)

    2007年1月2日 10:31

回答

  •  trapemiya

    有用なコードをご指導下さりうれしく思います。ありがとうございます。
    派生コントロールにしてそこへ実装する方法はこのようにするのですね。
    とても参考になりました。

    現在まだこの方法を試すには至っていませんでしたが、この実装の仕方と、
    2chで教えて頂いた内容も参考に該当するイベントに対する動作をユーザー
    コントロールのPublicメソッドにし、それらをそのコントロールを貼り付けた
    Formの側でコントロールのイベントを
    検知した時に明示的にコールする
    方法でとりあえずできればと思いました。

    また努力してみます。具体的なご指導、大変ありがとうございました!!

     

    2007年1月5日 16:56

すべての返信

  • 本件につきましては、別途、別のBBSにてアドバイスを頂いておりました。
    それによって解が見つけられる可能性が出てまいりました。
    また何かわからないことが出てきましたら、何卒よろしくお願いします。
    どうもありがとうございました。

    2007年1月4日 10:22
  •  VS2005初心者 さんからの引用
    本件につきましては、別途、別のBBSにてアドバイスを頂いておりました。
    それによって解が見つけられる可能性が出てまいりました。
    また何かわからないことが出てきましたら、何卒よろしくお願いします。
    どうもありがとうございました。

    だとしても、フィードバックはお願いします。
    リンクを貼るだけでも結構です。

    2007年1月4日 12:57
  • 本件は2chの「プログラム板」で教えて頂きましたが、別法のコードによる
    コントロールを示して頂きました。
    http://pc10.2ch.net/test/read.cgi/tech/1161250878/834-850
    ここから修正発展して自分の使いたい形式に取り込むことができるもの
    と思われました。あちらにもたくさんの手練の方がいらっしゃるので
    大変心強く思っておりました。

    それではまた別件でも何卒よろしくお願い致します。

    ※追伸ですが、この件はこちらのフォーラムではご教示、ご指導等頂けません
    でしたので、やはりマイクロソフトのControlクラスのネイティブの機能にはないもの
    だったようですが、あると便利な機能ではないかと思いました。

    2007年1月5日 0:36
  • 2chの方でも書かれていますが、簡単にはいかないようで、ある程度のコーディングが必要になります。
    参考までに、ちょこっと書いてみました。本当に動く最低限のコードですが(^^;

    Public Class PictureBoxSizeable
        Inherits System.Windows.Forms.PictureBox

     

        Dim 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

    2007年1月5日 4:10
    モデレータ
  •  trapemiya

    有用なコードをご指導下さりうれしく思います。ありがとうございます。
    派生コントロールにしてそこへ実装する方法はこのようにするのですね。
    とても参考になりました。

    現在まだこの方法を試すには至っていませんでしたが、この実装の仕方と、
    2chで教えて頂いた内容も参考に該当するイベントに対する動作をユーザー
    コントロールのPublicメソッドにし、それらをそのコントロールを貼り付けた
    Formの側でコントロールのイベントを
    検知した時に明示的にコールする
    方法でとりあえずできればと思いました。

    また努力してみます。具体的なご指導、大変ありがとうございました!!

     

    2007年1月5日 16:56