解决点击ToolStripButton时DataGridView自动添加行问题,实现AllowUserToAddRows切换
在VB.NET项目中,Form初始化时将DataGridView绑定到DataTable,并设置AllowUserToAddRows = False。点击普通Button可正常切换该属性的状态,但点击ToolStripButton时,除了切换状态还会自动添加一行,不符合预期。
问题原因
点击ToolStripButton时,DataGridView可能仍处于焦点状态,当AllowUserToAddRows被设为True的瞬间,DataGridView的焦点触发了自动添加新行的内置逻辑,导致意外添行。
解决方法
方法一:切换属性前让DataGridView失去焦点
在ToolStripButton的点击事件中,先将焦点转移到其他控件(比如Form本身或任意其他控件),再切换AllowUserToAddRows的状态:
Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click ' 将焦点转移到Form,让DataGridView失去焦点 Me.ActiveControl = Me DataGridView1.AllowUserToAddRows = Not DataGridView1.AllowUserToAddRows End Sub
方法二:使用BeginInvoke延迟执行属性切换
通过BeginInvoke将属性切换操作放到UI线程消息队列的末尾,等ToolStripButton的点击事件处理完成后再执行,避免焦点触发的自动添行逻辑:
Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click DataGridView1.BeginInvoke(Sub() DataGridView1.AllowUserToAddRows = Not DataGridView1.AllowUserToAddRows End Sub) End Sub
两种方法均可实现仅切换AllowUserToAddRows的状态,避免点击ToolStripButton时自动添加行,与普通Button的行为保持一致。
内容的提问来源于stack exchange,提问作者Mansour Dalir
相关产品推荐
相关产品推荐

