Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅将剪贴板中的字母复制到文本框_C#_.net_Regex - Fatal编程技术网

C# 仅将剪贴板中的字母复制到文本框

C# 仅将剪贴板中的字母复制到文本框,c#,.net,regex,C#,.net,Regex,我正在努力将剪贴板上的字母复制到文本框中。我尝试过过滤剪贴板,并用带有正则表达式的字母替换它,但我希望剪贴板保持不变 我试过: private void Schowek() { string schoweczek; if (Clipboard.ContainsText()) { schoweczek = Clipboard.GetText(); var schoweczek2 = Regex.

我正在努力将剪贴板上的字母复制到文本框中。我尝试过过滤剪贴板,并用带有正则表达式的字母替换它,但我希望剪贴板保持不变

我试过:

private void Schowek()
    {
        string schoweczek;
        if (Clipboard.ContainsText())
        {
            schoweczek = Clipboard.GetText();
            var schoweczek2 = Regex.Replace(schoweczek, @"[\d-]", string.Empty);
            Clipboard.SetText(schoweczek2);

        }
    }

但我认为这不是最有效的方法

更新: 我想出了这样的办法,虽然不管用:

private void textBox1_TextChanged(object sender, EventArgs e)
    {
        string checkstr=textBox1.Text;
        char[] checkchar = checkstr.ToCharArray();

        for (int i = 0; i < checkstr.Length; i++)
        {
            if (Char.IsLetter(checkchar[i])){


            }
            else
            {
                checkchar[i] = '\0';

            }

        }

       checkstr=String.Join("", checkchar);
       textBox1.Text = textBox1.Text + checkstr;
private void textBox1\u TextChanged(对象发送者,事件参数e)
{
字符串checkstr=textBox1.Text;
char[]checkchar=checkstr.ToCharArray();
对于(int i=0;i
对于特定的文本框实例,实现这一点的一种非常常见的方法是:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
   // pseudo-code, fell free to implement it yourself.
   if(!IsAllowed(e.KeyChar))
       e.Handled = true;
}

private readonly char[] allowed = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
private bool IsAllowed(char c)
{
    return allowed.Contains(c);
}    
更新

<>你可以使用MaskDebox,但我想你的老师会考虑这种作弊行为)

我可以想到:

private bool reenter = false;
private void textBox1_TextChanged(object sender, EventArgs e)
{
    if (reenter || String.IsNullOrEmpty(textBox1.Text)) return;

    var in = textBox1.Text.ToCharArray(); 
    var out = Filter(input).ToArray();
    var output = new String(out);

    if (!textBox1.Text.Equals(output))
    {
        reenter = true;
        textBox1.Text = output;
        reenter = false;
    }
}

private IEnumerable<char> Filter(IEnumerable<char> input)
{
     foreach(var c in input)
       if (IsAllowed(c))
           yield return c;
}
试试这个代码

string strClip = Clipboard.GetText();
string textvalue  = Regex.Replace(strClip, @"\d", "");

首先,从剪贴板复制文本,然后用“”替换数字。我测试一下,效果很好。

您只需订阅文本框事件并“更正”即可,而无需尝试通过本机粘贴功能粘贴剪贴板以外的内容或更改剪贴板的内容这是有价值的

如果允许用户在文本框中输入任何内容,然后在移动到下一个控件时清除值,请使用验证事件,该事件仅在移动到下一个字段后才会触发

如果要立即更正,请使用“文本更改”事件。但请注意在此事件中运行的代码量,因为当用户键入时,它会快速触发多次。如果可能,请使用仅在文本框失去焦点后才会触发的事件

你不需要在任何时候触摸剪贴板来完成你想做的事情

[编辑] 另外,要注意不要在人名中使用字符。很多人的名字中都有数字和奇怪的字符。
从另一个角度来看:
考虑“成为”文本框,查看输入或粘贴的内容。然后删除任何不允许的或(更好的用户体验):允许任何输入,但拒绝“OK”。并显示一个错误,直到只有有效的输入出现。

您想修改特定文本框中的文本还是一般情况下的文本?特定文本框。我正在制作一些类似注册表表单的东西,我需要一些文本框过滤不同的字符,例如:名称(仅接受字母)但地址(接受字母/数字)等。(这是学校项目,我们的老师要求它;/)在旁注上,以这种方式修改剪贴板数据是非常罕见的,除非你的应用程序是一个剪贴板辅助工具(我使用了一个删除格式的工具)。问题是“我希望剪贴板保持不变”,但第一个代码块的最后一行包含
clipboard.SetText(…)
。我必须允许用户从剪贴板复制文本(鼠标右键单击并粘贴)是的,但我的老师只允许名称文本框中的字母。我正在尝试使用if(textbox1.text.contains)但它不能正常工作;/i我的答案是指何时何地需要更正文本框中的值,以及如何更正,这已经得到了回答。有多种方法,包括正则表达式、Schlaviener的post中允许的charracters数组或Char.IsLetter().把二和二放在一起,你就解决了你的问题:)
private void textBox1_TextChanged(object sender, EventArgs e)
{
        string checkstr = textBox1.Text;
        char[] checkchar = checkstr.ToCharArray();
        char[] newchar = new char[checkstr.Length];

        int pos = 0;
        for (int i = 0; i < checkstr.Length; i++)
        {
            if (Char.IsLetter(checkchar[i]))
            {
                newchar[pos] = checkchar[i];
                pos++;
            }
        }

        checkstr = String.Join("", newchar);
        if (textBox1.Text != checkstr)
        {
            var start = textBox1.SelectionStart;
            textBox1.Text = checkstr;
            textBox1.SelectionStart = start;
        }

}
string strClip = Clipboard.GetText();
string textvalue  = Regex.Replace(strClip, @"\d", "");