c# - 如何画一条可选择的线?

标签 c# graphics gdi

我想创建一个应用程序,用户可以操纵他画的线。诸如删除线或选择线之类的东西。我应该怎么做?

提前致谢


我设法使用硬编码矩形来做到这一点。但我仍然不知道如何使用 drawLine() 执行此操作 我可以使用 drawPath 进行 HitTest 吗?

代码如下:

private bool selectGraph = false;
private Rectangle myrec = new Rectangle(50, 50, 100, 100);
private Graphics g;

private void panel1_Paint(object sender, PaintEventArgs e)
    {
        SolidBrush sb = new SolidBrush(Color.Blue);
        Pen p = new Pen(Color.Blue, 5);

        e.Graphics.DrawRectangle(p, myrec);
        e.Graphics.FillRectangle(sb, myrec);
    }

    private void panel1_MouseUp(object sender, MouseEventArgs e)
    {
        Point mPT = new Point(e.X, e.Y);

        if (e.Button == MouseButtons.Left)
        {
            if (myrec.Contains(mPT))
            {
                selectGraph = true;
                button1.Enabled = true;
            }
            else
            {
                selectGraph = false;
                button1.Enabled = false;
            }
        }
        Invalidate();
    }

最佳答案

那么你可以从一个简单的 Line 类开始:

public class Line
{
    public Point Start { get; set; }
    public Point End { get; set; }
}

然后你可以得到你的表单:

private Line Line = new Line();

protected override void OnPaint(PaintEventArgs e)
{
    e.Graphics.DrawLine(Pens.Red, this.Line.Start, this.Line.End);
}

protected override void OnMouseMove(MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        this.Line.Start = e.Location;
        this.Refresh();
    }
    else if (e.Button == MouseButtons.Right)
    {
        this.Line.End = e.Location;
        this.Refresh();
    }
}

所以基本上他们可以删除 this.Line 可能是在“MiddleButton”点击或其他东西上。这应该足以让您入门。

我已经 created a sample这说明了如何做到这一点。设置一些断点,看看事情是如何完成的。

关于c# - 如何画一条可选择的线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3597069/

相关文章:

python - 如何在Python中将图片设置为背景?我只导入图形。没有 pygame 或海龟

opengl - 翻译四元数

c++ - 应为使用 GetDIBits 函数从 HBITMAP 接收的 DIB 数据分配多少内存?

c++ - 如何在win32中获取鼠标光标的RGB字节数组?

winapi - 在 GDI 中旋转矩形

c# - 我如何保留将 ViewModel 的值转换为 Where 子句以应用于 My Controller 之外的 linq 查询的逻辑?

c# - 是否可以捕获对象引用上的哪个对象未设置为对象的实例。错误

c# - 使用 AppDomains 并行化非线程安全 DLL

iphone - 绘制视网膜分辨率的图像反射

c# - 如何使用 xml 在 MSTest 中创建参数化性能测试?