You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#绘图:如何将上一条线的坐标(CF)存储为下一条线的起始坐标(AF)

解决C#中保留上一次绘制坐标的问题

嘿,我懂你现在的困境啦——你在做学校的C#项目,需要把上一次绘制线条的终点坐标(CF),当成下一次画线的起点坐标(AF)对吧?看了你贴的代码片段,问题出在你把AD、BD这些坐标变量定义在按钮点击事件的局部作用域里了,每次点击按钮都会重新初始化这些变量,根本没法保留上一次的值!咱们来一步步解决这个问题:

第一步:把坐标变量移到类的成员区域

首先,你得把需要持久化的坐标变量(比如上一次的终点)定义在窗体类的成员位置,而不是方法内部。这样它们的生命周期会和窗体一致,能保留每次点击后的值。

比如在你的Form类里添加:

// 类成员变量,用来保存上一次的终点坐标
private double _lastAD = 0;
private double _lastBD = 0;
private int n = 0; // 假设n也是类成员,你的原代码里应该已有定义

第二步:修改按钮点击事件的逻辑

接下来调整button1_Click的逻辑,第一次点击时初始化坐标,之后的点击就用上一次保存的坐标作为新起点:

public void button1_Click(object sender, EventArgs e)
{
    int L = Convert.ToInt32(numericUpDown1.Value);
    int T = Convert.ToInt32(numericUpDown2.Value); // 补全你的第二个数值控件名

    if (n < 1)
    {
        // 第一次点击,初始化起点
        _lastAD = 0;
        _lastBD = 0;
        n++;
    }
    else
    {
        // 从第二次点击开始,直接基于上一次的终点计算新坐标
        n++;
    }

    // 绘制线条:用上一次的终点作为本次起点,计算新终点
    using (var g = Graphics.FromImage(pictureBox1.Image))
    {
        Pen drawPen = new Pen(Color.Black, 2);
        // 本次起点是上一次的终点,本次终点是起点偏移L和T后的位置
        int currentCFx = (int)_lastAD + L;
        int currentCFy = (int)_lastBD + T;
        
        // 绘制线条(AF → CF)
        g.DrawLine(drawPen, (int)_lastAD, (int)_lastBD, currentCFx, currentCFy);
        
        // 更新成员变量,把本次终点存为下一次的起点
        _lastAD = currentCFx;
        _lastBD = currentCFy;
        
        // 刷新PictureBox显示新绘制的内容
        pictureBox1.Refresh();
    }
}

关键要点提醒

  • 成员变量vs局部变量:局部变量每次方法调用都会重新创建,而类成员变量会在窗体生命周期内一直存在,这是保留上一次坐标的核心。
  • 绘制后更新变量:每次绘制完成后,一定要把当前的终点坐标更新到成员变量里,这样下一次点击才能拿到正确的起点。
  • 初始化图像:别忘了在窗体构造函数里初始化PictureBox的图像,避免空引用异常:
    public YourFormName()
    {
        InitializeComponent();
        // 初始化PictureBox的画布
        pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
    }
    

这样调整后,每次点击按钮绘制线条时,都会自动把上一次的终点(CF)作为下一次的起点(AF)啦!

内容的提问来源于stack exchange,提问作者Christheyankee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:40:18