c# - 画线不出现
问题描述
当鼠标移到面板上时,我正在尝试绘制一条垂直线:
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
Panel panel = sender as Panel;
if (panel != null)
{
using (Graphics g = panel.CreateGraphics())
{
using (Pen pen = new Pen(Color.Red))
{
g.DrawLine(pen, e.X, 0, e.X, panel.Height);
}
}
panel.Invalidate(true);
}
}
但是什么也没画。
我究竟做错了什么?
解决方案
所有 GDI 绘图都必须使用参数内部提供的对象在.Paint()
事件内部完成。使用来存储鼠标值,并触发绘制事件。Graphics
PaintEventArgs
.MouseMove()
尝试这个:
public partial class Form1 : Form
{
Point mouse;
MouseButtons buttons;
public Form1()
{
InitializeComponent();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
if (sender is Panel panel)
{
var g = e.Graphics;
g.DrawLine(Pens.Red, mouse.X, 0, mouse.X, panel.Height);
}
}
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
mouse=e.Location;
buttons=e.Button;
panel1.Refresh();
}
}
结果如下:
推荐阅读
- c# - C# 方法给出 System.InvalidCastException
- python - 将值范围映射到字符串
- c# - 删除相同的行
- google-kubernetes-engine - 演示 Kubernetes 集群的启动时间超过 15 分钟(并且还在继续)
- ascii - 如何使用流程图将“苹果”转换为带有 ascii 代码的“APPLE”
- android - 数据绑定传递带有特殊字符的 xml 元素
- angular - 角度延迟,暂停并在停止的地方重新启动
- matlab - 使用单个滑块更新 Matlab 中的多个绘图
- javascript - Chrome扩展程序中阻止的跨域框架
- bash - 在 Jenkins 声明性管道中找不到 Bash