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

时间:2012-01-16 16:19:46

标签: c# .net winforms scroll statusbar

我有一个带状态条的表单。表单已自动滚动。必要时,会出现滚动条,用户可以滚动。

但是,当内容大于表单大小并且用户必须向下滚动以查看内容的其他部分时,他/她还必须向下滚动以查看状态条。

我希望将状态条保留在表单底部,无论大小和滚动位置如何。我该怎么做?

为什么我不能将所有内容放在面板上并设置panel.AutoScroll = true

因为我在此面板上绘制了所有内容(使用GDI +),然后调整其大小,然后表单显示滚动条。现在,如果我在面板中设置自动滚动,则不显示滚动条,因为面板上没有控件,只有GDI +图纸。

2 个答案:

答案 0 :(得分:3)

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

如果您正在使用GDI +进行大量绘图,我可以考虑使用两个很好的选项来替换您的设计。

  • 如果用户必须与您的图形进行交互,请考虑创建自定义控件以封装功能和图形。

  • 如果它只是显示某些数据,您可以将图形绘制到位图并在PictureBox中查看。

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

答案 1 :(得分:1)

听起来你正在倒退。 “表格”不应该显示滚动条,面板应该是。

如果面板的“内容”大于面板,并且您正在面板内完成所有这些绘图,那么您需要将面板的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应该停靠在表单底部,而不是干扰面板。