画好后,在WinForm窗体上面拉动QQ或者文件夹之类的,不要碰到winform窗体边框前,都会出现一坚坚的横线,不知怎么解决,请高手指日指教事件.其实就是没有全部刷新,panel里面有很多一条一条的线,是不是没有刷新到panel里面
解决方案 »
- C# 2010中如何获取硬件信息呢?
- 求三甲医院管理系统源码
- treeview的根节点选中事件不触发?
- 关于获取类的实际类型的问题
- 问个两个小问题,2005
- ==愚翁老大来看== 在windowsService中为什么 这个线程不起作用??
- WinForm下的datagrid的小问题
- c#中图片分割的问题
- 孟子E章,请进! 请教您http://dotnet.aspx.cc/首页(asp.net /c# /vb.net/webservice等)布局及调用数据库显示问题!
- 能不能在HyperlinkColumn的URL格式化字符串里传送两个绑定的字段
- 谁有空麻烦帮忙解释一下这个类的,谢谢!
- C# 随机数
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
}
{
DrawBorder(e.Graphics, e.ClipRectangle, p2,5);
} //画控件界
private void DrawBorder(Graphics g, Rectangle rect, Pen p,int PenWidth)
{
p.Width = PenWidth;
Rectangle rectangle = new Rectangle(rect.X, rect.Y, rect.Width-1, rect.Height-1);
g.DrawRectangle(p, rectangle);
}上面是代码,一楼想得太简单了,也不是二楼所说的那样,换了几台电脑都是这样,窗口给挡住时会触发上面panel1_Paint(object sender, PaintEventArgs e)事件的,但panel里面就有一坚一坚的线.公司的同事也是这个问题
的确偶尔有这个问题,可以肯定拖动的时候导致e.ClipRectangle发生了变化
{
base.OnPaint(e);
} 中的话刷新太大了
base.OnPaint(e);
我觉得差不多一样的代码吧,放在protected override void OnPaint(PaintEventArgs e)
里的话就不会有这样的问题,因为OnPaint是全部刷新的.
那就全部刷新呗……想精确得到该刷新的部分可不太容易。像这种简单的拖动,性能上应该觉查不出来。
你这样反而不美观。竖线一定是前一个 e.graphic 的残余。你不单要画新的该画的区域,还要把旧的不用的区域也给重绘掉,否则它将残存在那里……这就是问题所在。
DrawBorder(e.Graphics, e.ClipRectangle, p2, 5);
把这句话改成
DrawBorder(e.Graphics, ClientRectangle, p2, 5);
在窗体里建一个Label,然后在Paint里加入 private void Form1_Paint(object sender, PaintEventArgs e)
{
label1.Text = e.ClipRectangle.ToString();
DrawBorder(e.Graphics, e.ClipRectangle, p2, 5);
}再移动一个窗体在主窗体上,看看ClipRectangle的变化。
private void panel1_Paint(object sender, PaintEventArgs e)
{
DrawBorder(e.Graphics, ClientRectangle, p2,5);
} //画控件界
private void DrawBorder(Graphics g, Rectangle rect, Pen p,int PenWidth)
{
p.Width = PenWidth;
Rectangle rectangle = new Rectangle(rect.X, rect.Y, rect.Width-1, rect.Height-1);
g.DrawRectangle(p, rectangle);
}
{
InitializeComponent();
ResizeRedraw = true;
}
没有ClientRectangle这样用法的,会报错:
"当前上下文中不存在名称“ClipRectangle”