VB NET + 检查文本框是否有 \/:*?"<>|

VB NET + Check if textbox have \/:*?"<>|

当用户使用 /:*?"<>| 时,我有一个文本框,他无法插入符号。

    Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
    If e.KeyChar = ">"c Or e.KeyChar = "<"c Or e.KeyChar = "\"c Or e.KeyChar = "/"c Or e.KeyChar = ":"c Or e.KeyChar = "*"c Or e.KeyChar = "?"c Or e.KeyChar = "|"c Or e.KeyChar = "?"c Or e.KeyChar = """"c Then
        e.Handled = True
        MessageBox.Show("You cant use \/:*?""" & "<" & ">" & "|", "WARNING !!!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    End If
End Sub

但是我如何使用 if 来检查它们是否在文本框中是此符号之一 "/:*?"<>|" ?因为使用 copy/paste...... ...

我尝试输入 test.form 这段代码:

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    If flag Then
        Return
    End If

    flag = True
    Dim InvalidChars = "/:*?""<>|".ToCharArray()

    For i As Integer = 0 To InvalidChars.Length - 1
        TextBox1.Text = TextBox1.Text.Replace(InvalidChars(i).ToString(), "")
    Next

    flag = False
End Sub

但是没有声明标志,我不明白 bool.....

另一个我试了同样的形式

Imports System.Text.RegularExpressions

PublicClass测试

Private Sub test_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    TextBox2.Text = Regex.Replace(TextBox1.Text, "/:*?\<>", "")
End Sub

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged

End Sub

结束Class

textbox1 和 textbox2 一样

几种方式:

  • 在文本框中禁用粘贴命令。
  • 使用TextChanged事件检测新文本然后
    • 使用简单的循环检测无效字符。
    • 对整个文本使用 Regex 来检测无效字符。
  • 创建一个只允许输入有效字符的屏幕键盘。禁用其他输入法。
  • 允许无效字符。提交后将其剥离。

简单示例

为您的文本框添加一个 TextChanged 事件处理程序。在处理程序中添加以下代码:

if (flag) return;

flag = true;
var InvalidChars = "/:*?\"<>|".ToCharArray();

for (int i = 0; i < InvalidChars.Length; i++)
  txtYourTextBox.Text = txtYourTextBox.Text.Replace(InvalidChars[i].ToString(), "");

flag = false;

flag 是防止递归 TextChanged 事件的表单级 bool 变量。

要对 Regex 执行相同的操作,请在 TextChanged 事件处理程序中添加以下代码:

txtYourTextBox.Text = Regex.Replace(txtYourTextBox.Text, "[/:*?\"<>|]", "");

Regex class 在 System.Text.RegularExpressions 命名空间中可用。请注意,在这种情况下我没有使用 flag,因为这只会导致重入一次。