如何限制用户在文本框中输入特定字符(xml无效字符)

本文关键字:字符 xml 无效 输入 用户 何限制 文本 | 更新日期: 2023-09-27 18:27:30

我的TextBox有这个问题。用户在TextBox中输入text/string,该字符串将作为xml文件中的attribute值导出。有没有办法禁止用户输入(键入+粘贴)禁止的(xml格式的)字符,比如欧元的符号?

如何限制用户在文本框中输入特定字符(xml无效字符)

您可以在传递到xml之前过滤掉所有不需要的字符,而不是限制用户。

string textToPAss = ReplaceInvalidCharacters(yourTextbox.Text);

public string ReplaceInvalidCharacters(string toReplace)
{
   toReplace = toReplace.Replace("€","");
   //similarly do for all others unwanted characters
    return toReplace;
}

处理KeyPress事件

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == '€')
    e.Handled = true;
}

无效的XML字符有其有效的XML等价物。所以,如果您可以将输入转换为有效的XML,那么最终结果将是有效的XML。

inputText = SecurityElement.Escape(inputText);

参考:SecurityElement.Escape

这将阻止在文本框中键入字母a。

private void textBox1_TextChanged(object sender, EventArgs e)
{
    int pos = (sender as TextBox).Text.IndexOf("a");
    (sender as TextBox).Text = (sender as TextBox).Text.Replace("a", "");
    if (pos!= -1)
    (sender as TextBox).Select(pos, 0);
}

但正如Somesh Mukherjee所说,稍后过滤掉无效字符。一个简单的CCD_ 1就可以了。

下面是您要查找的代码示例:

class MyTextBox : TextBox
{
    protected override void WndProc(ref Message m)
    {
        // Trap WM_PASTE:
        if (m.Msg == 0x302 && Clipboard.ContainsText())
        {
            var removedInvalid = from c in Clipboard.GetText()
                                 where XmlConvert.IsXmlChar(c)
                                 select c;
            SelectedText = new string(removedInvalid.ToArray());
            return;
        }
        base.WndProc(ref m);
    }
    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        if (!XmlConvert.IsXmlChar(e.KeyChar))
            e.Handled = true;
        base.OnKeyPress(e);
    }
}

以上操作可防止用户在文本框中笔划或粘贴无效的XML字符。