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
,因为这只会导致重入一次。
当用户使用 /:*?"<>| 时,我有一个文本框,他无法插入符号。
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
,因为这只会导致重入一次。