protected override void OnPaint(PaintEventArgs e)在何时运行?
我下载了一些源码,看到有人在窗体代码里有:
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
..........
}
这样的写法,来在窗体上边画一些图案。
查到Form里有:
protected override void OnPaint(PaintEventArgs e);
//
//
// 参数:
// e:
// 包含事件数据的 System.EventArgs。
[EditorBrowsable(EditorBrowsableState.Advanced)] 开始搞不清她是方法,还是事件?(即如果是方法,不知道她是何时被调用的?) 后来回忆起,老师讲C#语言规范时,拿事件event举例:写事件的发行者时触发事件要 提供一个受保护的虚拟方法,来触发事件,即按老师说的上边Form里
应该是这样的:
protected override void OnPaint(PaintEventArgs e);
{
PaintEventHandler handler = paint;
//声明一个临时的委托,防止可能的线程同步
if (handler != null)
{
handler(this, e);
}
}
public delegate void PaintEventHandler (object sender,PubEventArgs e);//声明所需代理
public event PaintEventHandler paint;//事件的声明
他是重写了这个受保护的虚拟方法吗?他是在哪被触发而运行的呢?
好像有点乱,呵呵
我下载了一些源码,看到有人在窗体代码里有:
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
..........
}
这样的写法,来在窗体上边画一些图案。
查到Form里有:
protected override void OnPaint(PaintEventArgs e);
//
//
// 参数:
// e:
// 包含事件数据的 System.EventArgs。
[EditorBrowsable(EditorBrowsableState.Advanced)] 开始搞不清她是方法,还是事件?(即如果是方法,不知道她是何时被调用的?) 后来回忆起,老师讲C#语言规范时,拿事件event举例:写事件的发行者时触发事件要 提供一个受保护的虚拟方法,来触发事件,即按老师说的上边Form里
应该是这样的:
protected override void OnPaint(PaintEventArgs e);
{
PaintEventHandler handler = paint;
//声明一个临时的委托,防止可能的线程同步
if (handler != null)
{
handler(this, e);
}
}
public delegate void PaintEventHandler (object sender,PubEventArgs e);//声明所需代理
public event PaintEventHandler paint;//事件的声明
他是重写了这个受保护的虚拟方法吗?他是在哪被触发而运行的呢?
好像有点乱,呵呵
解决方案 »
- C# 编译后点击Line,对应的Form2不弹出来,求教
- (C#)UDP发送数据慢
- c#连接sql字符串加密该怎样加密?
- 现在c#的数据库都用2005了吗?
- 正则求教。。过客兄逍遥兄速速现身
- 汽车修理厂管理软件
- datatable getchanges() acceptechanges() 线等~~~~~~~~~~~~求高手
- C# 编写的Activex控件中调用office word com组件遇到的安全问题,望前辈指点
- DataSet的疑问!~~~~~~~~~~~~~~~~~~~~~
- 我的这个添加验证用户名是否存在的时候报错了,求帮忙
- C#中一个泛型类,如何通过反射得到实例
- 反射字符串为对应的类型
System.Windows.Forms.Control 的 OnPaint 实现[EditorBrowsable(EditorBrowsableState.Advanced)]
protected virtual void OnPaint(PaintEventArgs e)
{
PaintEventHandler handler = (PaintEventHandler) base.Events[EventPaint];
if (handler != null)
{
handler(this, e);
}
}
OnPaint用于在窗体区域失效时重新绘制。一个简单的例子就是窗口拖动到屏幕外会使部分区域失效。
如果窗口再被拖回到屏幕,会发现窗口中该有的东西并未丢失。这就是OnPaint在大显身手了。
实际上,在被拖到屏幕以外的过程中,OnPaint仍在起作用,只是有些部分被屏幕裁剪了。OnPaint会在任何窗体区域需要重绘的时候运行! 例如最大化、拖动