Coffee_Break Ответов: 2

Почему так трудно установить местоположение сплиттера?


Всем привет,
Содержание кодов приведено ниже; требуется 3 панели и 2 сплиттера. Однако 2-й разделитель (Зеленый) должен располагаться между серой и коричневой панелями. Но не в нужном месте. Есть какие-нибудь предложения? Спасибо.

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.Show()

        Dim tmpSplitter As Splitter
        Dim tmpPanel As Panel
        Dim MainPanel As Panel

        ' This is main panel
        '
        MainPanel = New Panel
        With MainPanel
            .Name = "MainPanel"
            .Dock = DockStyle.Fill
            .BackColor = Color.LightGray
            .BorderStyle = BorderStyle.Fixed3D
            .Visible = True
        End With
        Me.Controls.Add(MainPanel)

        ' 1: First Top Panel and Splitter 
        '
        tmpPanel = New Panel
        With tmpPanel
            .Name = "Panel1"
            .Dock = DockStyle.Top
            .BackColor = Color.Red
            .Visible = True
        End With

        tmpSplitter = New Splitter
        With tmpSplitter
            .Name = "Split1"
            .Dock = DockStyle.Top
            .BackColor = Color.Blue
            .Cursor = Cursors.HSplit
        End With

        Me.Controls.Add(tmpSplitter)
        Me.Controls.Add(tmpPanel)


        ' 2: Second Panel added to the left side of the main panel
        '
        MainPanel.Dock = DockStyle.Right
        MainPanel.Size = New Size(MainPanel.Width * 0.5, MainPanel.Height)

        Dim btn As New Button
        btn.Size = New Size(10, 50)
        btn.Location = New Point(MainPanel.Location.X - btn.Width, MainPanel.Location.Y)
        Me.Controls.Add(btn)


        tmpPanel = New Panel
        With tmpPanel
            .Size = New Size(10, MainPanel.Height)
            .Location = New Point(MainPanel.Location.X - .Width - 5, MainPanel.Location.Y)
            .Name = "Panel2"
            .Dock = DockStyle.Fill
            .BackColor = Color.Brown
        End With

        ' THIS SPLITTER IS NOT IN THE RIGHT PLACE. Must be between brown and gray panel
        '
        tmpSplitter = New Splitter
        With tmpSplitter
            .Size = New Size(5, MainPanel.Height)
            .Location = New Point(MainPanel.Location.X - .Width, MainPanel.Location.Y)
            .Name = "Split2"
            .Dock = DockStyle.Right
            .BackColor = Color.Green
            .Cursor = Cursors.VSplit
        End With

        Me.Controls.Add(tmpSplitter)
        Me.Controls.Add(tmpPanel)

    End Sub
End Class


Что я уже пробовал:

Я изменил местоположение сплиттера, но это не было бессмысленно. Это можно сделать вручную на этапе проектирования, но нельзя сделать с помощью кода во время выполнения.

Richard Deeming

Почему вы отметили этот вопрос как "C#", когда он явно не имеет никакого отношения к C#?

2 Ответов

Рейтинг:
2

OriginalGriff

Просто используйте SplitContainer вместо Splitter и используйте панели, с которыми он уже работает. Таким образом, вся обработка сплиттера делается за вас.


Рейтинг:
11

Coffee_Break

Привет всем, еще немного исследований и попробуйте решить эту проблему

Me.Controls.SetChildIndex (tmpSplitter, 0)
достаточно написать на последней строке. Спасибо Вам за Ваш вклад