我想在from窗体画一个跟随鼠标移动的十字(大小是窗体的左边到右边、顶部到底部),但是我的实现的效果闪烁的很厉害,请高手相助解决闪烁问 在C#中是有一个可以不让窗体闪烁的,可惜我记不得了,帮你UP吧! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 private void frmCurve_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { Graphics g =e.Graphics; Pen bluePen =new Pen(Color.Blue); Bitmap locaBitmap = new Bitmap(ClientRectangle.Width,ClientRectangle.Height); Graphics bitmapGraphics = Graphics.FromImage(localBitmap); LineDrawRoutine(bitmapGraphic,bluePen); g.DrawImage(locaBitmap,0,0); bitmapGraphics.Dispose(); bluePen.Dispose(); localBitmap.Dispose(); g.Dispose(); }不知是否能解决你的闪烁问题 当然,可以把你要画的改为 e.Graphics.DrawLine(Pens.Blue,new Point(nMouseX,0),new Point(nMouseX,nHeight)); e.Graphics.DrawLine(Pens.Blue,new Point(0,nMouseY),new Point(nWidth,nMouseY));只是个思路,还没测试 stdao(道可道) : 你的方法我试过了,还是闪的很厉害有人能够解决我的问题吗? 你做一个控件,用以画直线的(要是vb6的话就没有这么麻烦了,有shape控件)然后,用你刚才做的控件代替画线试试,应该就没问题了我原来在vb6里面也用过类似的东西 加二个时间延迟器和一个 Boolean 标记变量,譬如延迟 0.1 秒,每 0.1 秒置一个标记,然后 0.01 秒后再复位,在 MouseMove中判断此标记变量再画图。MouseMove 事件是触发非常频繁的事件,所以在 WebForm 上不支持服务器端的 MouseMove 事件,只有 WindowsForm 才支持。 private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e){Bitmap bm=new Bitmap(this.Width,this.Height);Graphics g=Graphics.FromImage(bm);g.Clear(this.BackColor);Pen pen=new Pen(Color.Black,1);g.DrawLine(pen,0,e.Y,this.Width,e.Y);g.DrawLine(pen,e.X,0,e.X,this.Height);Graphics g1=this.CreateGraphics();g1.DrawImage(bm,0,0);pen.Dispose();bm.Dispose();g.Dispose();g1.Dispose();} public Form1(){ // // Windows 窗体设计器支持所必需的 // InitializeComponent(); // // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 //// SetStyle(ControlStyles.UserPaint,true); SetStyle(ControlStyles.AllPaintingInWmPaint,true); SetStyle(ControlStyles.DoubleBuffer,true);// SetStyle(ControlStyles.ResizeRedraw, true);} datagridview绑定数据库 问form action问题 xp 下 IP包 截取软件 在JS里调用 Web service 里面的方法 VS2008,也就是在.NET FrameWork3.5中使用WebService时如何使用代理类? .NET WinForm程序能否做到在纯英文OS下显示中文字符? 100求助!如何使得Button上的文字垂直显示!在线等!!! 如何在c#中改变form运行顺序 请求高手解答 问两个问题,请大家帮忙 请帮忙看看这个关于UDP的程序!! 高分急求解,在线结帖!
private void frmCurve_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g =e.Graphics;
Pen bluePen =new Pen(Color.Blue);
Bitmap locaBitmap = new Bitmap(ClientRectangle.Width,ClientRectangle.Height);
Graphics bitmapGraphics = Graphics.FromImage(localBitmap);
LineDrawRoutine(bitmapGraphic,bluePen);
g.DrawImage(locaBitmap,0,0);
bitmapGraphics.Dispose();
bluePen.Dispose();
localBitmap.Dispose();
g.Dispose();
}
不知是否能解决你的闪烁问题
e.Graphics.DrawLine(Pens.Blue,new Point(nMouseX,0),new Point(nMouseX,nHeight));
e.Graphics.DrawLine(Pens.Blue,new Point(0,nMouseY),new Point(nWidth,nMouseY));
只是个思路,还没测试
你的方法我试过了,还是闪的很厉害
有人能够解决我的问题吗?
(要是vb6的话就没有这么麻烦了,有shape控件)然后,用你刚才做的控件代替画线试试,应该就没问题了我原来在vb6里面也用过类似的东西
{
Bitmap bm=new Bitmap(this.Width,this.Height);
Graphics g=Graphics.FromImage(bm);
g.Clear(this.BackColor);
Pen pen=new Pen(Color.Black,1);
g.DrawLine(pen,0,e.Y,this.Width,e.Y);
g.DrawLine(pen,e.X,0,e.X,this.Height);
Graphics g1=this.CreateGraphics();
g1.DrawImage(bm,0,0);
pen.Dispose();
bm.Dispose();
g.Dispose();
g1.Dispose();
}
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent(); //
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
// SetStyle(ControlStyles.UserPaint,true);
SetStyle(ControlStyles.AllPaintingInWmPaint,true);
SetStyle(ControlStyles.DoubleBuffer,true);
// SetStyle(ControlStyles.ResizeRedraw, true);
}