添加滚动事件以重新绘制表单

时间:2013-10-16 03:38:24

标签: c#

我是C#的新手,我正在尝试在用户点击表单的位置放置一个点。我正在使用300 x 200表格,最大尺寸为640 x 480.使用表单的AutoScrollMinSize属性,我设置了这个最大尺寸:

this.AutoScrollMinSize = new Size(640, 480);

我可以在表格上放置点,但是一旦我滚出可见区域,点就会消失。由于我手动创建了滚动区域,我正在寻找一种方法来添加一个滚动事件处理程序,它将调用this.Invalidate()以在滚动发生时重新绘制表单。非常感谢任何建议。

这就是我所拥有的:

public Form1()
{
  InitializeComponent();
  this.AutoScrollMinSize = new Size(640, 480);

  vScrollBar vScrollBar1 = new VScrollBar();
  vScrollBar1.Scroll += new ScrollEventHandler(this.vScrollBar1_Scroll);
}

以下是我如何调用事件处理程序:

private void vScrollBar1_Scroll(Object sender, ScrollEventArgs e)
{
   this.Invalidate();
}

我从Microsoft文档中得到了这个示例,但是当我垂直滚动时,绘图仍然消失,所以我知道表单没有重新绘制。

2 个答案:

答案 0 :(得分:0)

您不需要VScrollBar控件(您从未将其添加到表单中)。

只需覆盖表单的OnScroll方法:

protected override void OnScroll(ScrollEventArgs se) {
  base.OnScroll(se);
  this.Invalidate();
}

答案 1 :(得分:0)

尝试将您的活动置于deligate

并使用 http://msdn.microsoft.com/en-us/library/system.windows.forms.splitter.aspx

http://msdn.microsoft.com/en-us/library/system.windows.forms.scrollbar.aspx

How to set scroll bar in Windows form

并设置

vScrollBar.visible = true and if it is in pannel or form set AutoScroll = true