如何检测DataGridView选中行变化?选中行时清除「Write」标签
问题分析与解决
你的代码没生效主要有几个原因,而且没覆盖需求里的核心逻辑,下面一步步改:
原代码的问题
- 初始
selected_row = 0,如果DataGridView默认选中的就是第0行,第一次切换到其他行才会触发逻辑,但切回第0行时就不会触发,判断逻辑有漏洞 - 没判断
CurrentRow是否为空,当点击DataGridView空白区域时,CurrentRow会是null,访问Index会直接抛出空引用异常 - 只加了弹窗,没实现「清除Write标签」的核心操作
- 完全没处理「未输入内容时恢复标签」的需求
修正方案
1. 修复SelectionChanged事件,实现选中行时清除标签
先确保你的DataGridView已经正确绑定了SelectionChanged事件(设计器里可以在属性面板的事件列表里确认),然后替换成下面的代码:
private void dataGridView2_SelectionChanged(object sender, EventArgs e) { // 先判断是否存在选中的行,避免空引用 if (dataGridView2.CurrentRow != null) { // 清除Write标签的文本 labelWrite.Text = string.Empty; } }
2. 添加输入控件的TextChanged事件,实现空输入时恢复标签
假设你用来输入内容的控件是TextBox(命名为textBoxInput),给它添加TextChanged事件,代码如下:
private void textBoxInput_TextChanged(object sender, EventArgs e) { // 如果输入内容为空或全是空格,恢复标签的「Write」文本 if (string.IsNullOrWhiteSpace(textBoxInput.Text)) { labelWrite.Text = "Write"; } }
这样就能实现:选中DataGridView的行时清空标签,输入框内容为空时自动把标签改回「Write」。
内容的提问来源于stack exchange,提问作者user22822757
相关产品推荐
相关产品推荐

