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

Windows Form中如何实现鼠标点击按钮为选中变量赋值

实现方法

直接给动态生成的棋盘按钮统一绑定点击事件即可,事件触发时的sender参数就是被点击的按钮实例,不需要额外遍历字典查找匹配。

修改点

  • 新增通用的按钮点击事件处理方法,将触发事件的按钮实例赋值给静态变量selectedfigure
  • 初始化每个按钮时,给按钮的Click事件绑定上述处理方法

完整代码

public static Button selectedfigure = null;
public Dictionary<(int x, int y), Button> _Panels = new Dictionary<(int x, int y), Button>();

public void Fillboard()
{
    for (int x = 0; x < 8; x++)
    {
        for (int y = 0; y < 8; y++)
        {
            var boardBtn = new Button()
            {
                Height = 64,
                Width = 64,
                Location = new Point(x * 64, y * 64),
                BackColor = CalculateBackColor(x,y),
                BackgroundImage = CalculateBackimage(x,y)               
            };
            // 绑定点击事件
            boardBtn.Click += BoardButton_Click;
            _Panels[(x, y)] = boardBtn;
            Controls.Add(boardBtn);
        }
    }
}

private void BoardButton_Click(object sender, EventArgs e)
{
    // 直接将被点击的按钮赋值给选中变量
    selectedfigure = (Button)sender;
}

可选扩展

  • 如果需要实现点击同一个按钮取消选中的效果,在事件处理里加判断即可:
private void BoardButton_Click(object sender, EventArgs e)
{
    var clickedBtn = (Button)sender;
    selectedfigure = selectedfigure == clickedBtn ? null : clickedBtn;
}
  • 如果需要获取被点击按钮对应的棋盘坐标,直接通过字典反向查键即可:
var clickedPos = _Panels.First(item => item.Value == selectedfigure).Key;
// 点击位置的x坐标为clickedPos.x,y坐标为clickedPos.y

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:36:16