助记符button点击一个button的点击事件,但它不发射文本框的离开事件

助记符button点击一个button的点击事件,但它不发射文本框的离开事件,第1张

概述助记符button点击一个button的点击事件,但它不发射文本框的离开事件

我有一个windows窗体与几个文本框和一个button。 该button有一个助记键被触发(例如和确定)。 我订阅了TextBox的Leave事件,以便根据用户input进行valIDation和更新相关控件(例如,如果我更改了产品的成本,租赁比例将被更新)。 如果我单击确定button,一切正常,但如果我使用助记键(Alt + O),button的Click事件后触发文本框的Leave事件。 正因为如此,我的文本框没有更新的button的Click事件之前。 有任何想法吗?

正常行为摘要: – 更新TextBox值并点击OKbutton – > TextBox触发Leave事件和值被更新。 然后,处理Click事件。

奇怪的行为总结: – 更新TextBox的值,并按下快捷键(Alt + O)的确定button – >点击该button的事件被激发,然后文本框的Leave事件被激发。

先谢谢了。

如何检测系统电源事件,如挂起,hibernate等

在没有应用程序注意的情况下,在窗口中编程截取屏幕截图

在C#中拦截窗口运动

如何通过单击input触发windows 7中的屏幕键盘?

如何在linux下使用F#轻松处理/ dev / input事件

有没有办法将事件处理程序附加到C#中正在运行的进程列表?

如何捕捉RichEdit上的OnScroll事件?

是否有可能通过windows键(可能没有挂钩)捕获windows开始菜单popup窗口?

事件可以是进程间的吗?

在WPF中的windows激活Alt-Tab问题

尝试一些技巧..

Dim sbuttonBy as String Private Sub TextBox1_GotFocus(ByVal sender As Object,ByVal e As System.EventArgs) Handles TextBox1.GotFocus sbuttonBy = "" End Sub Private Sub TextBox1_KeyDown(ByVal sender As Object,ByVal e As System.windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown If e.Alt Then sbuttonBy = "KB" End Sub Private Sub TextBox1_Leave(ByVal sender As Object,ByVal e As System.EventArgs) Handles TextBox1.Leave UpdateIt() End Sub Sub UpdateIt() 'codes here End Sub

编辑:

Use this sub to handle every button that added dynamically AddHandler button1.Click,AddressOf Me.buttons_Click Private Sub buttons_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) If sbuttonBy = "KB" Then updateit() 'codes here End Sub

您可以使用“LostFocus”事件而不是使用“离开”…

我终于找到了使用来自不同地方的代码的解决方案。 我认为把它写下来很重要,因为我没有在任何地方找到完整的答案。 即使是与这个问题有关的问题也很难找到。 让我解释我做了什么:

1)重写表单中的ProcessMnemonic方法。

protected overrIDe bool ProcessMnemonic(char charCode) { // get the mnemonic key of the button that submits the form (accepts the form or performs some action) char mnemonicChar = DesignerHelper.GetMnemonicChar(btnCreate); // check if the button has a mnemonic key and if the mnemonic key pressed corresponds to it if (mnemonicChar != ' ' && charCode == mnemonicChar) { // get the control that is focused. this Could be the textBox where the mnemonic key was pressed Control ctrl = DesignerHelper.FindFocusedControl(this); if (ctrl != null) { // fire the necessary event to update the state of the controls. in my case it's leave event. DesignerHelper.FireEvent(ctrl,"Leave",new EventArgs()); } } return base.ProcessMnemonic(charCode); }

2)在我自己的DesignerHelper类中可用的方法:

public static Control FindFocusedControl(Control control) { var container = control as ContainerControl; while (container != null) { control = container.ActiveControl; container = control as ContainerControl; } return control; } /// <summary> /// Programatically fire an event handler of an object /// </summary> /// <param name="targetobject"></param> /// <param name="eventname"></param> /// <param name="e"></param> public static voID FireEvent(Object targetobject,string eventname,EventArgs e) { /* * By convention event handlers are internally called by a protected * method called OnEventname * eg * public event TextChanged * is triggered by * protected voID OnTextChanged * * If the object dIDn't create an OnXxxx protected method,* then you're screwed. But your alternative was over overrIDe * the method and call it - so you'd be screwed the other way too. */ //Event thrower method name //eg OnTextChanged String methodname = "On" + eventname; MethodInfo mi = targetobject.GetType().getmethod( methodname,BindingFlags.Instance | BindingFlags.NonPublic); if (mi == null) throw new ArgumentException("Cannot find event thrower named " + methodname); mi.Invoke(targetobject,new object[] { e }); } internal static char GetMnemonicChar(button btn) { if (btn.UseMnemonic && btn.Text.Contains("&")) { return btn.Text.Substring(btn.Text.IndexOf("&") + 1,1)[0]; } return ' '; }

总结

以上是内存溢出为你收集整理的助记符button点击一个button的点击事件,但它不发射文本框的离开事件全部内容,希望文章能够帮你解决助记符button点击一个button的点击事件,但它不发射文本框的离开事件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1291878.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存