【问题标题】:VB Masked Textbox Loses DigitVB 蒙面文本框丢失数字
【发布时间】:2014-06-06 01:38:56
【问题描述】:

我在 VB.NET 中有一个屏蔽文本框来输入时间值。我试过面具 90:00、00:00 和 ##:##。第一次在框中输入值时,它输入正常。我稍后用

清除文本
mskTime.Text = ""

我也试过

mskTime.Clear()
mskTime.ResetText()

问题是在清除文本并输入新时间后,输入的第一个字符被删除。更准确地说,当我添加时间 12:34 时,我输入 1,它出现在第一个字符槽中。然后我按 2,1 消失,2 出现在第二个字符槽中。当您再次输入修复它时,该字符不会消失。

有没有人看到这个问题或者知道为什么第一个字符消失了?

【问题讨论】:

  • 听起来你确实在不知不觉中触发了一个事件处理程序。判断何时触发以及触发什么的最简单方法是在 Visual Studio 中设置断点,并在您与 UI 交互时单步执行您的代码 (how to link)。如果这不能解决问题,您可能应该发布更多代码让我们更好地了解问题。

标签: vb.net visual-studio-2010 time masking maskedtextbox


【解决方案1】:

发现问题:

我有一个 KeyDown 函数来处理用户在时间字段中按下回车:

    If e.KeyCode = Keys.Enter Then
        Schedule()
        e.SuppressKeyPress = True
    End If

注释掉

e.SuppressKeyPress = True 

解决了这个问题。我最初用它来防止 Windows 在每次按下 enter 时发出叮当声。

【讨论】:

  • 与叮声无关。这一切都与事件处理以及它进入 Windows 的嵌套有多远有关,然后如果它下降那么远则处理该按键
  • 关于如何以不同的方式去除叮当声的任何建议?这是我在谷歌搜索后发现的。
  • 我通过从 KeyDown 切换到 KeyPress 并使用 e.handled = True 消除了叮当声
  • 您确实意识到叮当声是 Windows 声音系统配置文件的一部分,对吧?
  • 是的,但我想阻止它在特定情况下发生。
【解决方案2】:

我在 C# 中遇到了完全相同的问题。在以编程方式清除MaskedTextBox 之前,输入工作正常。之后,在一个MaskedTextBoxes 中输入的第一个字符在输入第二个字符后被删除。原来问题出在KeyDown 事件中。我在那里等待Enter-Key,做了一些事情并清除了TextBoxes。之后,问题就出现了。

我现在通过将KeyDown-Event 替换为KeyPress-Event 解决了这个问题。

【讨论】:

    【解决方案3】:

    这是我最终用来捕捉 Enter 键并移动到下一个字段的内容,当我回到它时不会搞砸蒙面的文本框。 道格拉斯

        private void TxtLocID_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                e.Handled = true;
                SendKeys.Send("{Tab}");
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多