Проблема с автопрокруткой при использовании левого дока - C# Telerik Winforms - PullRequest
0 голосов
/ 04 февраля 2020

Вот мой код:

RadScrollablePanel panel = new RadScrollablePanel() { AutoScroll = true, Dock = DockStyle.Fill};
pnlclp.PanelContainer.Controls.Add(panel);
foreach (var date in dates)
    panel.Controls.Add(new ucDetails() { Dock = DockStyle.Left });

Я добавляю некоторые элементы управления в RadScrollablePanel, а затем добавляю их в PanelContainer. Все отлично работает. Если я добавлю так много элементов управления внутри RadScrollablePanel, который не виден при первом взгляде, будет показана и полоса прокрутки.

Но если я изменю DockStyle.Left на DockStyle.Right в foreach l oop, после загрузки элементов управления не будет отображаться полоса прокрутки, и это странно, и я не могу найти причину или решение для решения этой проблемы.

Я даже пытаюсь изменить свойство RightToLeft RadScrollablePanel. но безуспешно: (

Есть предложения?

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Чтобы обойти эту проблему стандартной панели Microsoft WinForms, я могу предложить закрепить все пользовательские элементы управления слева и использовать пустую панель, которая занимает все доступное пространство слева от формы, поэтому точно такое же поведение, как и у всех UserControls закреплены справа. При изменении размера формы отрегулируйте ширину пустой панели. Описанный подход иллюстрируется приведенным ниже кодом:

public partial class Form1 : Form
{
    UserControl1[] userControls;
    RadScrollablePanel parentPanel;
    Panel spacePanel;

    public Form1()
    {
        InitializeComponent();

        new Telerik.WinControls.RadControlSpy.RadControlSpyForm().Show();
    }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        this.parentPanel = new RadScrollablePanel();
        this.parentPanel.Dock = DockStyle.Fill;

        this.parentPanel.BackColor = Color.Yellow;

        this.Controls.Add(this.parentPanel);
        this.parentPanel.AutoScroll = true;

        int count = 10;
        this.userControls = new UserControl1[count];

        for (int i = 0; i < count; i++)
        {
            this.userControls[i] =
                new UserControl1()
                {
                    Dock = DockStyle.Left,
                    BackColor = Color.FromKnownColor((KnownColor)(i + 50))
                };

            this.parentPanel.Controls.Add(this.userControls[i]);
        }

        this.spacePanel = new Panel();
        this.spacePanel.Dock = DockStyle.Left;
        this.parentPanel.Controls.Add(this.spacePanel);
    }

    protected override void OnSizeChanged(EventArgs e)
    {
        base.OnSizeChanged(e);

        if (this.spacePanel != null)
        {
            int lastPanelWidth = this.parentPanel.Width;
            foreach (Control control in this.parentPanel.PanelContainer.Controls)
            {
                if (control.Dock == DockStyle.Left && control != this.spacePanel)
                {
                    lastPanelWidth -= control.Width;
                }
            }

            if (lastPanelWidth < 0)
            {
                lastPanelWidth = 0;
            }

            this.spacePanel.Width = lastPanelWidth;
        }
    }
}
1 голос
/ 11 февраля 2020

Следуя предоставленной информации, я подготовил пример проекта для проверки поведения в RadScrollablePanel. Я зарегистрировал это на нашем портале отзывов, создав ветку publi c. Вы можете отслеживать его прогресс, подписываться на изменения статуса и добавлять свои комментарии по следующей ссылке: https://feedback.telerik.com/winforms/1453253-radscrollablepanel-missing-scrollbar-when-there-is-no-enough-space-to-display-the-content-controls

Надеюсь, эта информация поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...