gpt4 book ai didi

c# - 调整控件大小时 Winforms 自动滚动丢失

转载 作者:行者123 更新时间:2023-11-30 17:11:18 24 4
gpt4 key购买 nike

我有一个显示乘用车座位布局的用户控件。

它根据乘用车的大小,简单地像时尚矩阵一样绘制了几个“SeatControl”。

为了更好地查看,主控件调整“SeatControl”的大小以适应所有可用空间,这意味着 SeatControl 将根据可用空间变大或变小。

这很完美。

但是,当客户区太小时,我们要避免将控件缩小太多,否则它们会变形并且无法阅读。

在这种情况下,我们打开自动滚动,以便用户可以滚动查看整个布局。

但是,如果我们从一个小屏幕(带有滚动条)开始,将其最大化(滚动条将隐藏并且座位控件会增加大小)并恢复窗口大小(滚动将返回并且座位控件将缩小到最小尺寸),卷轴会丢失。

为了清楚起见,图像中的相同操作: small layout with vertical scroll bar

最大化窗口(只显示部分屏幕以避免大图像):

partial full screen, notice that scroll has gone as expected

并将其还原(注意滚动条和客户区的布局位置): but on scroll bar

此调整大小由以下代码控制:

private void FixSizes()
{
if (mModel == null)
return;

this.SuspendLayout();

Size clientSize = this.ClientSize;
Size minimumSize = new Size(SeatUserControl.MinimumDescentSize.Width, SeatUserControl.MinimumDescentSize.Height);

//Here we try to find the best size for the seat user control to fit all the client area
Size controlSize = new Size(
Math.Max(clientSize.Width / mModel.Length, minimumSize.Width),
Math.Max(clientSize.Height / mModel.Width, minimumSize.Height)
);

AutoScrollMinSize = new Size(controlSize.Width * mModel.Length, controlSize.Height * mModel.Width);
this.SetDisplayRectLocation(0, 0);

for (int row = 0; row < mModel.Width; ++row)
{
for (int col = 0; col < mModel.Length; ++col)
{
Control control = this.Controls[(row * mModel.Length) + col];

control.Location = new Point(col * controlSize.Width, row * controlSize.Height);
control.Size = controlSize;
}
}

this.ResumeLayout();
}

这个方法很简单,由 OnClientSizeChanged 方法调用:

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

this.FixSizes();
}

我能够确定,如果我将 SeatControl 保持在固定大小,问题就会消失,但输出效果不是很好,因为我们希望 SeatControl 使用最大可用空间。

看来我遗漏了或忘记了对自动滚动设置进行某些操作,以免丢失。有什么想法吗?

最佳答案

来自评论的解决方案:

假设您正在使用某种父容器,例如面板,或者会限制 SeatControl 最大尺寸的东西,请使用停靠栏“Fill”(中间那个)。这将根据控件自动调整滚动条。

对于 future 的读者来说,使用 Dock: Fill 属性时,结果将如下所示:

enter image description here

请注意由于 gridview 控件大于其父容器而自动生成的滚动条。

关于c# - 调整控件大小时 Winforms 自动滚动丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11471041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com