Din*_*inu 10 c# drawing winforms
我可以用mouseClick绘制一个矩形吗?到目前为止,我的代码无效.你能帮助我吗?
private void panel1_MouseClick(object sender, MouseEventArgs e)
{
Graphics g = this.CreateGraphics();
Pen pen = new Pen(Color.Black, 2);
g.DrawRectangle(pen, 100,100, 100, 200);
}
Run Code Online (Sandbox Code Playgroud)
Axe*_*ger 13
编辑版:
没有太多假设你想做什么:
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, 100,100, 100, 200);
pen.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
您的代码无效,因为它在窗口上绘制矩形(this),然后您的面板隐藏绘制的矩形.
对于这样一个简单的情况,通常重写Paint只是为了在面板上绘制矩形而付出太多努力.但是,以这种方式绘制矩形是有效的,但是当重新绘制表单时矩形将消失(例如,通过最小化并随后再次显示该表单.如果矩形必须是持久的,则必须使用绘制方法,为此您将必须(例如)在click事件中创建矩形,然后在paint事件中绘制它.(请参阅roygbiv的解决方案以获得此类方法).注意:如果您同时使用paint方法,则应将其保留为尽可能高效,因为paint方法经常被称为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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73808 次 |
| 最近记录: |