【问题标题】:How to force text being entered into a textbox into Uppercase?如何强制将文本输入到文本框中为大写?
【发布时间】:2019-12-06 03:10:15
【问题描述】:

我想让用户在文本框中输入的文本变为大写。我知道有两种方法可以做到这一点,它们是:

Textbox1.Text = UCase(Textbox1.Text)
or
Textbox1.Text = Textbox1.Text.ToUpper

但是:两者都有相同的问题(当嵌入Textbox1_TextChanged 事件处理程序时),即光标不断移回开头,所以如果你慢慢输入,比如 abcdef,它会显示为 FEDCBA .有没有办法在每次使文本大写后将光标移回字符串的末尾?

【问题讨论】:

    标签: vb.net visual-studio textbox uppercase textchanged


    【解决方案1】:

    转到文本框属性,将CharacterCasing更改为Upper

    【讨论】:

      【解决方案2】:

      使用 KeyPress 事件来检测输入的小写字母,并随时将它们转换为大写:

      Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        If KeyAscii > 96 And KeyAscii < 123 Then
          'Typed letter from "a-z", map it to "A-Z"
          KeyAscii = KeyAscii - 32
        End If
      End Sub
      

      Ucase() 仅在该人完成输入文本后使用。

      如果您使用的是 VB.NET,那么您只需将 TextBox 的 .CharacterCasing 属性设置为 .Upper - 无需代码。但如果你出于某种原因想使用代码,请使用:

      TextBox1.CharacterCasing = CharacterCasing.Upper
      

      【讨论】:

      • 谢谢!一个后续行动 - 当我为该文本框创建一个事件“Keypress”时,它会自动生成:
      • Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) 处理 TextBox1.KeyPress - 我可以用你的替换它吗?
      • 如果这是它给你的,那么你没有使用 VBA,你使用的是 Visual Studio 和 VB.NET——它们不是一回事。我更新了答案以包括如何在 VB.NET 中执行此操作
      • 感谢有关 CharacterCasing 的提示 - 这也有效!但是,所有 Keypress 的东西都不是浪费时间,因为我还想用它来分析正在输入的内容。
      • 我已将标签从 VBA 更改为 VB.Net,因为您是对的。这显然是一个基本的困惑,但我是一个完全的业余爱好者,试图从头开始自学——我从大学免费获得了这个软件。
      【解决方案3】:

      为什么不将代码Textbox1.Text = Textbox1.Text.ToUpper 放在Textbox1_LostFocus 事件中而不是Textbox1_TextChanged event 中。它非常简单,即使您将文本粘贴到字段中也能正常工作。一旦您的光标移动到另一个字段,就会触发该事件,导致文本从小写变为大写。

      【讨论】:

        【解决方案4】:

        你也可以使用:

        Private Sub Textbox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Textbox1.KeyPress
            e.KeyChar = UCase(e.KeyChar)
        End Sub
        

        ...如果您需要做一些自定义格式或逻辑。否则我还建议使用默认的 TextBox 属性 CharacterCasing 设置为 Upper

        请注意,当用户将文本粘贴到 TextBox 组件时,此解决方案无法处理这种情况,如果需要,您也必须以编程方式处理这种情况,但 TextBox 属性 CharacterCasing即使用户将文本粘贴到组件中,也会为您执行此操作。

        【讨论】:

          【解决方案5】:

          您的版本在 Visual Basic 2019 中对我来说不太适用,但它构成了这一点的基础,确实如此(其中“txtPrem1”是文本框):

          Private Sub txtPrem1_KeyPress(sender As Object, e As KeyPressEventArgs) 处理 txtPrem1.KeyPress 暗淡 KeyAscii = AscW(e.KeyChar) 如果 KeyAscii > 96 并且 KeyAscii

          【讨论】:

          • Argh - 如何格式化以使其看起来正确? (抱歉 - 完全是新手)
          • 没有必要在 VB.NET 中做所有这些 - 看看我更新的答案。
          【解决方案6】:

          这个怎么样:

          Private Sub MyText_TextChanged(sender As Object, e As EventArgs) _
                                        Handles MyText.TextChanged
              Dim oText As TextBox = CType(sender, TextBox)
              oText.Text = oText.Text.ToUpper
              oText.SelectionStart = oText.Text.Length
              oText.SelectionLength = 0
          End Sub
          

          【讨论】:

            猜你喜欢
            • 2011-01-02
            • 2010-09-17
            • 2018-10-01
            • 2013-04-29
            • 1970-01-01
            • 2018-03-11
            • 1970-01-01
            • 1970-01-01
            • 2020-10-01
            相关资源
            最近更新 更多