使用左停靠时出现自动滚动问题 - C# Telerik Winforms



这是我的代码:

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中添加了这么多乍一看不可见的控件,滚动条也会显示出来。

但是如果我在foreach循环中将DockStyle.Left更改为DockStyle.Right,则在加载控件后,它将不会显示滚动条,并且很奇怪,我找不到任何原因或解决方案来解决此问题。

我什至尝试更改RadScrollablePanelRightToLeft属性,但没有成功:(

有什么建议吗?

根据提供的信息,我准备了一个示例项目来测试RadScrollablePanel中的behaior。 我已经通过创建一个公共线程在我们的反馈门户中记录了它。您可以跟踪其进度,订阅状态更改并在以下链接上添加您的评论:https://feedback.telerik.com/winforms/1453253-radscrollablepanel-missing-scrollbar-when-there-is-no-enough-space-to-display-the-content-controls

我希望这些信息有所帮助。

为了解决标准 Microsoft WinForms 面板的此问题,我可以建议将所有用户控件停靠在左侧,并使用一个占用窗体左侧所有可用空间的空面板,因此与所有用户控件停靠在右侧的行为完全相同。更改窗体的大小时,调整空面板的宽度。下面的代码说明了所描述的方法:

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;
}
}
}

最新更新