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

解决点击ToolStripButton时DataGridView自动添加行问题,实现AllowUserToAddRows切换

VB.NET中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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:25:06