- PR -

SplitContainerを使用したカスタムコントロールについて

1
投稿者投稿内容
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 2007-04-16 13:48
こんにちは。いつも拝見させて頂いています。

SplitContainerの資料があまりないので、質問させてください。
開発環境 WindowsXP
言語   VB.NET
DB    FireBird

SplitContainerを配置して、垂直方向に分割し、左のPanel1にはLabelを
右のPanel2にはTextBoxを配置して、Dock=Fillとしています。

このコントロールを実際にFormに実装すると、デザイン時には
Split分割線が表示されず、実行時だけ、Split移動可能となっています。
仕様なのでしょうが、この分割線の表示と移動を、デザイン時だけにしたい
場合、どのように記述したらよいのでしょうか?
ユーザーは分割線位置を変更できず、開発者が分割線位置を変更したいのです。

どなたかご教授ください。
よろしくお願いいたします。

コード:
Private Sub AplMsg_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        Dim instance As SplitContainer = Me.SplitContainer1
        Dim em As SplitterCancelEventArgs
        If Me.DesignMode = True Then
            instance.OnSplitterMoving(em)
        End If
End Sub



りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 2007-04-16 14:07
すみません。追加します。
カスタムコントロールとしてのSplitContainerの質問です。


Public Class AplMsg
Inherits UserControl

よろしくお願いいたします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-04-16 14:45
ヘルプは読みましたか?

SplitContainer.IsSplitterFixed プロパティ (System.Windows.Forms)
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.splitcontainer.issplitterfixed(VS.80).aspx
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 2007-04-16 15:34
burton999さん。ご返答ありがとうございます。

実行時に、分割線の移動はできなくなりました。ありがとうございます。
ですが、デザイン時に、分割線を表示することができません。
Resizeイベントではないのでしょうか?
開発者がデザイン時に分割線移動ができるためには、
どのタイミングで、どうすればいいのか途方にくれています。

どなたかご教授のほど、よろしくお願いいたします。

コード:
Private Sub SplitContainer1_SplitterMoved(ByVal sender As Object, ByVal e As System.Windows.Forms.SplitterEventArgs) Handles SplitContainer1.SplitterMoved
        If Me.DesignMode = True Then
            Me.SplitContainer1.IsSplitterFixed = False '分割線を固定しない
        Else
            Me.SplitContainer1.IsSplitterFixed = True
        End If
    End Sub
    Private Sub SplitContainer1_SplitterMoving(ByVal sender As Object, ByVal e As System.Windows.Forms.SplitterCancelEventArgs) Handles SplitContainer1.SplitterMoving
        If Me.DesignMode = True Then
            Me.SplitContainer1.IsSplitterFixed = False '分割線を固定しない
        Else
            Me.SplitContainer1.IsSplitterFixed = True
        End If
    End Sub

    Private Sub AplMsg_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize, Me.Load
        Dim em As SplitterCancelEventArgs
        Dim instance As SplitContainer = Me.SplitContainer1

        If Me.DesignMode = True Then
            instance.IsSplitterFixed = False '分割線を固定しない
            'instance.OnSplitterMoving(em)
            Me.SplitContainer1.OnSplitterMoving(em)
        Else
            instance.IsSplitterFixed = True
        End If
    End Sub



burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-04-16 16:08
詳しくないですが、デザイン時のコントロールの動作は通常の実装とは異なるのではないでしょうか?

デザイン時サポートの拡張
http://msdn2.microsoft.com/ja-jp/library/37899azc(VS.80).aspx

開発したカスタムコントロールを製品として提供するのではないのであれば
デザイナからではなく、コード上で設定したほうがいいかと。
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2007-04-16 16:14
引用:

ですが、デザイン時に、分割線を表示することができません。
開発者がデザイン時に分割線移動ができるためには、
どのタイミングで、どうすればいいのか途方にくれています。



なんでコードでやろうとしてるのか?
ってよく考えたらユーザーコントロールでしたね。
内在コントロールのプロパティなので
Public Class AplMsg さんが公開してあげればと思いますが。。。
そしたら、利用者はプロパティウィンドウで
False設定 → デザイン作業 → True設定
とできますね。
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 2007-04-16 16:49
まどかさん、burton999さん、ご返答ありがとうございます。
以下のように、プロパティを作成してみました。
コード:
<Description("分割線")> _
        Public Property IsSplitterFixed() As Boolean
        Get
            IsSplitterFixed = m_isSpliterFixed
        End Get
        Set(ByVal Value As Boolean)
            m_isSpliterFixed = Value
            If Me.DesignMode = True Then
                m_isSpliterFixed = False
                Me.SplitContainer1.IsSplitterFixed = False
                Me.SplitContainer1.BorderStyle = Windows.Forms.BorderStyle.FixedSingle
            End If
        End Set
    End Property




ですが、BoderStyleで分かりやすくなっただけで、動きはどうすれば
掴めるのでしょうか?
ユーザーコントロールをClickしても、選択されるだけで、内部の
SplitContailerの分割線を、アプリ開発者側がどうやって選択できるでしょう?

引用:
プロパティウィンドウで
False設定 → デザイン作業 → True設定



もう少し、詳しく教えていただけませんか?

よろしくお願いいたします。




1

スキルアップ/キャリアアップ(JOB@IT)