我可以用mouseClick绘制一个矩形吗?我的代码到目前为止没有工作.你可以帮我吗?
private void panel1_MouseClick(object sender,MouseEventArgs e) { Graphics g = this.CreateGraphics(); Pen pen = new Pen(Color.Black,2); g.DrawRectangle(pen,100,200); }
解决方法
编辑版本:
没有太多的猜测你想做什么:
private void panel1_Click(object sender,EventArgs e) { using (Graphics g = this.panel1.CreateGraphics()) { Pen pen = new Pen(Color.Black,2); Brush brush = new SolidBrush(this.panel1.BackgroundColor); g.DrawRectangle(pen,200); pen.Dispose(); } }
您的代码无法正常工作,因为它是在窗口(这)上绘制矩形,并且绘制的矩形然后被您的面板隐藏.
在这样一个简单的情况下,通常覆盖Paint是一个太多的工作,只需在面板上绘制一个矩形.但是,以这种方式绘制矩形是有效的,但是当重新绘制表单时,矩形将被取消(例如通过最小化并随后再次显示该形式).如果矩形必须持久,则必须使用绘图方法将必须(例如)在点击事件中创建矩形,然后在绘制事件中绘制矩形(请参阅roygbiv的解决方案)注意:如果与绘图方法一起使用,则应保持效率高于可能,因为绘制方法经常被称为verry.
编辑2
您不需要清除背景,因为您的矩形将始终在同一个地方绘制.为了在用户隐藏的点绘制矩形(这是您想要的假设),您应该将代码移动到鼠标向下的事件,例如:
private void panel1_MouseDown(object sender,MouseEventArgs e) { using (Graphics g = this.panel1.CreateGraphics()) { Pen pen = new Pen(Color.Black,2); Brush brush = new SolidBrush(this.panel1.BackColor); g.FillRectangle(brush,this.panel1.Bounds); // redraws background g.DrawRectangle(pen,e.X,e.Y,20,20); pen.Dispose(); brush.Dispose(); } }