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

WinForms C#动态按钮替换MousePosition坐标问题求助

解决方案

核心思路是用**字典(Dictionary)**替代两个独立列表,让每个动态按钮和它对应的坐标一一绑定,这样就能实现点击按钮拖动后更新对应坐标,而不是重复添加。

步骤1:替换原有列表为字典

把原来的xInput和yInput两个列表,换成一个字典变量,用来存储按钮与对应坐标的映射关系:

// 声明在类内部,与原xInput、yInput变量同级
private Dictionary<Button, Point> buttonCoordinates = new Dictionary<Button, Point>();

步骤2:修改MouseUp事件逻辑

在addBtn_Up方法里,先获取当前操作的按钮实例,然后直接更新字典中该按钮对应的坐标——如果是第一次拖动,自动添加新条目;如果是重复拖动,则覆盖旧坐标:

private void addBtn_Up(object sender, MouseEventArgs e)
{
    Button targetBtn = sender as Button;
    if (targetBtn == null) return;

    int xMouse = MousePosition.X;
    int yMouse = MousePosition.Y;
    
    // 更新或添加按钮对应的坐标
    buttonCoordinates[targetBtn] = new Point(xMouse, yMouse);
    
    Cursor = DefaultCursor;
}

步骤3:修改批量点击逻辑

在button5_Click方法里,遍历字典中的所有坐标值,依次执行点击操作:

private async void button5_Click(object sender, EventArgs e)
{
    foreach (Point coord in buttonCoordinates.Values)
    {
        ClickAtClass.ClickAt(coord.X, coord.Y);
        await Task.Delay(1000);
    }
}

额外说明

  • 动态创建按钮的button6_Click方法无需修改,新按钮绑定事件后,拖动时会自动触发addBtn_Up,字典会自动完成按钮与坐标的关联。
  • 如果需要严格保留按钮的创建顺序,可以改用OrderedDictionary,或者结合List<Button>记录按钮创建顺序,遍历的时候按列表顺序从字典中取对应坐标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:03:28