如何在用户滚动的任何位置保持状态条可见

本文关键字:状态 位置 任何 用户 滚动 | 更新日期: 2023-09-27 18:20:31

我有一个带有状态条的表单。表单已启用自动滚动。需要时,会显示滚动条,用户可以滚动。

然而,当内容大于表单大小并且用户必须向下滚动才能查看内容的其他部分时,他/她也必须一直向下滚动才能看到状态条。

无论大小和滚动位置如何,我都想将状态条保持在表单底部。如何做到这一点?

为什么我不能把所有东西都放在一个面板上并设置panel.AutoScroll = true

因为我在这个面板上画了所有的东西(用GDI+),然后调整它的大小,然后窗体显示滚动条。现在,如果我在面板中设置自动滚动,则不会显示滚动条,因为面板上没有控件,只有GDI+绘图。

如何在用户滚动的任何位置保持状态条可见

将所有需要滚动的内容放在面板内,并在面板上设置自动滚动。您的状态条应该位于面板之外。

如果你正在用GDI+进行大量绘图,我可以想到两个好的选择来代替你的设计。

  • 如果用户必须与图形交互,请考虑创建一个自定义控件来封装功能和图形。

  • 如果它只是一些数据的显示,则可以将图形绘制到位图中,然后在PictureBox中查看。

我不知道你想实现什么,所以我不能说什么是正确的解决方案。

听起来你是在倒退。"表单"不应该显示滚动条,面板应该显示。

如果面板的"内容"大于面板,并且您正在面板内绘制所有这些图形,则需要将面板的AutoScrollMinSize设置为内容的大小,而不是不断放大面板的大小。

设置面板内容的大小(示例):

panel1.AutoScrollMinSize = new Size(500, 500);

然后在面板的绘制事件中,应用转换:

private void panel1_Paint(object sender, PaintEventArgs e) {
  e.Graphics.TranslateTransform(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y);
  // do your normal painting here
}

使用"双缓冲"面板以避免闪烁。

您的StatusStrip应该只是停靠在表单的底部,而不会干扰面板。