【问题标题】:Preventing a TextBox leave event when loosing focus失去焦点时防止文本框离开事件
【发布时间】:2017-08-20 04:33:43
【问题描述】:

当文本框处于焦点时,如何在单击可链接/按钮时停止文本框离开事件?

我有一个文本框TextBox1。在它的休假事件中,我必须验证它的文本。根据它的文本,我必须填充下一个文本框 TextBox2 的建议。

所以在这个过程中,当我在TextBox1 处于焦点时单击链接标签[这是出于不同的原因],它正在触发 Leave 事件 [这很明显] 并调用验证功能 [哪个不应该被调用 - 因为用户在完成输入后没有离开文本框 - 它是由可链接点击触发的]。

我试图取消订阅链接标签的点击事件上的离开事件,但这无济于事,因为离开事件首先被触发。

这种情况应该怎么办?

编辑: 贴出相关代码,

两个文本框都有相同的事件处理程序

    private void txtBox_Leave(object sender, EventArgs e)
    {
        TextBox textBox = sender as TextBox;
        textBox.Visible = false;

            #region TextBox 1
            if (textBox.Equals(txtBox1))
            {
                //Text Box 1 validation
                //Populating Suggestions for TextBox2
                //Passing focus on Textbox 2
            }
            #endregion
            #region TextBox 2
            else if (textBox.Equals(txtBox2))
            {
                //Text Box 2 validation
            } 
            #endregion
     }

正如我之前提到的,链接标签是不同的,在文本框操作期间我无法禁用或隐藏它。

一个观察结果是, 当我点击链接标签时,文本框的离开事件首先引发,然后是链接标签的点击事件,因此我们无法在链接上执行任何逻辑(如取消订阅文本框的离开事件或其他)-标签的点击事件 - 到时候验证过程将完成,这是我们不想要的。

【问题讨论】:

  • 您使用的是 WinForms、WPF 等吗? (您应该将此添加到标签列表中)。
  • @SamusArin 我正在使用 winForms。
  • 能否请您发布相关代码,特别是 TextBox 离开事件处理程序和验证例程?

标签: c# winforms events textbox


【解决方案1】:

当你点击link label时,它变成了焦点控制。您可以做的是 - 在textbox1_leave 事件处理程序中找到表单的焦点控件。如果 不是 link label 则只应完成填充 textbox2 建议的功能。

此链接应该有助于您找到表单的重点控制 - What is the preferred way to find focused control in WinForms app?

【讨论】:

  • 是的,我也在按照这些思路进行计算,听起来好像是从 leave 事件无条件地触发了验证,但仍然希望查看代码以确保没有其他任何事情发生。
  • @SamusArin ,是的。验证被无条件触发。无论 Arpit 建议什么,它都可以帮助我解决这种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
相关资源
最近更新 更多