关于在Panel控件有滚动条时图形如何重绘以及如何加入点击滚动条事件

在Windows Forms项目中,为Panel添加滚动条并处理图形重绘和点击滚动条事件。遇到的问题包括:即使设置AutoScroll=True仍不显示滚动条,以及滚动后图形重叠。解决方案是添加超出Panel边界的Label控件触发滚动条,并在重绘时考虑AutoScrollPosition。同时,通过重载WndProc方法监听WM_VSCROLL和WM_HSCROLL消息实现滚动条事件响应。
摘要由CSDN通过智能技术生成

 

最近在做的项目里有一个Panel画图的功能,完成后,客户又要求此图能够放大。于是查看msdn,直到panel有带有滚动条的功能,在加的过程中,遇到了以下几个问题:
1 即使加上 panel1.AutoScroll = True 时,也没有出现滚动条
2 有了滚动条后,在移动滚动条后,图片上的点没有清除,又重新绘上新点,造成点变成了线,图形重叠的利害,变成了黑乎乎一片

针对以上问题,查了相关资料,得以解决:
1 msdn上关于panel设置滚动条属性的说明是这样:
  ScrollableControl.AutoScroll :获取或设置一个值,该值指示容器是否允许用户滚动到任何被放置在它的可视边界之外的控件。
  就是说在Panel里必须放置一个控件,而且这个控件的位置在Panel可见的边界之外。
  于是我在程序中加入一个label的控件,此控件在Panel里
  dim Labf as new Label
   Labf.Location = New Point(x, y)  'x,y 的值大于panel的宽和高,Labf的大小(size)可以设成很小
  Panel1.AutoScroll = True
  Panel1.SetAutoScrollMargin(3, 3)
  这样就可以了

2 这个是因为Panel中的AutoScrollPosition问题。当改变了窗口的滚动条的位置后,窗口客户区的坐标原点就发生了变化,和原来的坐标原点的偏移量就用Panel.AutoScrollPosition表示。
  改动前程序:
        Dim myPen As New P

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值