0

我对文本框有这个问题。用户在 TextBox 中输入文本/字符串,该字符串作为 xml 文件中的属性值导出。有什么方法可以禁止用户输入(类型+粘贴)禁止(对于 xml 格式)字符,例如欧元的符号?

4

5 回答 5

0

处理 KeyPress 事件

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

}
于 2013-08-13T07:49:07.940 回答
0

这是您要查找的代码示例:

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 字符划入或粘贴到文本框中。

于 2013-08-13T08:25:06.813 回答
0

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

string textToPAss = ReplaceInvalidCharacters(yourTextbox.Text);


public string ReplaceInvalidCharacters(string toReplace)
{
   toReplace = toReplace.Replace("€","");
   //similarly do for all others unwanted characters
    return toReplace;
}
于 2013-08-13T07:44:02.750 回答
0

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

inputText = SecurityElement.Escape(inputText);

参考:SecurityElement.Escape

于 2013-08-13T07:50:03.757 回答
0

这将阻止在文本框中输入字母 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 所说,稍后过滤无效字符。一个简单的String.Replace()就可以了。

于 2013-08-13T07:59:15.333 回答