首页 > 解决方案 > 画线不出现

问题描述

当鼠标移到面板上时,我正在尝试绘制一条垂直线:

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);
    }
}

但是什么也没画。

我究竟做错了什么?

标签: c#.netwinforms

解决方案


所有 GDI 绘图都必须使用参数内部提供的对象在.Paint()事件内部完成。使用来存储鼠标值,并触发绘制事件。GraphicsPaintEventArgs.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();
    }
}

结果如下:

scr


推荐阅读