【问题标题】:Invoking the click method of a button programmatically以编程方式调用按钮的单击方法
【发布时间】:2009-07-05 07:52:18
【问题描述】:

简单的问题(我认为):我希望能够在预定义的对象上调用 click 方法,特别是标准 c#BindingNavigator 上的 bindingNavigatorDeleteItem 按钮。我需要拦截删除,以便我可以验证是否允许删除记录。如果是,我想调用前面提到的单击事件,它可以很好地删除所述记录。如果记录不符合删除条件,我想中止删除。

我的一位工程同事建议我只需在工具条中添加另一个按钮并使用它的单击方法(当然,我可以访问)来检查记录的资格并调用原始根据需要删除按钮。

如果有其他更好的方法,请传递。

【问题讨论】:

    标签: c# button methods invoke toolstrip


    【解决方案1】:

    要简单地调用点击 - 您应该能够使用 PerformClick()

    你提到的其他事情让我有点不知所措 - 你能澄清一下吗?

    【讨论】:

    • 我尝试了“PerformClick()”方法,但没有任何反应!在 PerformClick() 方法实际执行之前,我还必须做一些其他的准备工作吗?该方法附带的帮助不是您所说的“信息性”——它是一行文字,上面写着“用鼠标单击时激活工具条项目”——正如我所说,没有真正的帮助。我必须遗漏一些东西,因为我已经成功地尝试通过反射调用该方法(感谢 StackOverflow 中的另一个帖子),但 PerformClick() 的优雅正是我所寻找的。不用担心其他的事情。
    • 没关系。 MS 的“出色”程序员决定,如果按钮不可见,则不需要它的功能,所以……PerformClick 仅在按钮既启用又可见时才有效(从源代码中获取) - 去看看!
    • 感谢您添加该评论。我遇到了类似的问题。我觉得不需要在单元测试期间实际显示我的控制...所以按钮不可见,什么也没发生!
    【解决方案2】:

    不要拦截工具条按钮(并向用户开放其他技术,例如删除 DataGrid 中的一行),如果无效,请使用数据源上的事件之一取消删除。

    【讨论】:

    • 我曾想过,但是当我检查 RowDeleting 事件时,我没有看到终止删除的明显方法(例如某些事件的 CancelEventArgs 中的 Cancel),所以我走上了不同的轨道.如果我错过了什么,请照亮!
    • 您没有错过任何内容 - DataTable.RowDeleting 事件缺少取消删除的方法。很遗憾,因为它迫使您采取变通办法。
    猜你喜欢
    • 2013-10-09
    • 2017-06-17
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    相关资源
    最近更新 更多