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
相关产品推荐
相关产品推荐

