繁体   English   中英

如何区分用户输入,但允许应用程序本身更改文本

[英]How to distinguish between user input, but allow the application itself to change text

我有一个文本框,不允许用户输入“ [”和“]”字符。 但是,我想将文本默认设置为同时包含“ [”和“]”的值。 我该怎么办? 这是我的代码:

TextBox txtEdit = new TextBox();
txtEdit.TextChanged += txtEdit_TextChanged;
txtEdit.Text = "[Test]";

private void txtEdit_TextChanged(object sender, TextChangedEventArgs e)
{
    if ((sender as TextBox).Text.Contains("[") || (sender as TextBox).Text.Contains("]"))
    {
        MessageBox.Show("Cannot enter '[' or ']' characters!", "", MessageBoxButton.OK, MessageBoxImage.Information);
        (sender as TextBox).Text = "";
    }
}

更改Text属性后放置TextChanged事件

TextBox txtEdit = new TextBox();
txtEdit.TextChanged += txtEdit_TextChanged;

private void txtEdit_TextChanged(object sender, TextChangedEventArgs e)
{
    if (comboBoxYou.Text == txtEdit.Text) 
    {
        return;
    }
    else if ((sender as TextBox).Text.Contains("[") || (sender as TextBox).Text.Contains("]"))
    {
        MessageBox.Show("Cannot enter '[' or ']' characters!", "", MessageBoxButton.OK, MessageBoxImage.Information);
        (sender as TextBox).Text = "";
    }
}

我将为文本框设置一个keydown事件。

如果您不希望用户输入'['和']'字符,请读入关键字符并设置e.Handled = true如果它与您不需要的字符匹配)。

Toon Casteele的答案是一个很好的解决方案。 否则,请尝试向表单中添加一个布尔值,当用户选择一个值时,将其设置为true,然后检查TextChanged事件中的值是否为true。

private bool IsSelectedItemText; //set it to true when an item is selected

然后执行以下检查:

if(!IsSelectedItemText)
    //Check for square brackets
else
    //Add text from item

另外,这与问题没有直接关系,但我强烈建议您仅将“ sender”对象强制转换一次。 完成后,代码如下所示:

private void txtEdit_TextChanged(object sender, TextChangedEventArgs e)
{
    TextBox tb = sender as TextBox;

    if(!IsSelectedItemText)
    {            
        if (tb.Text.Contains("[") || tb.Text.Contains("]"))
        {
            MessageBox.Show("Cannot enter '[' or ']' characters!", "", MessageBoxButton.OK, MessageBoxImage.Information);
            tb.Text = "";
        }
    }
    else
    {
        //Set text from selected item
    }

    IsSelectedItemText = false;
}

请记住,选择一个项目时,将布尔变量设置为“ true”。

如果那是您想要的。

private void txtEdit_TextChanged(object sender, TextChangedEventArgs e)
{
string a = (sender as TextBox).Text.substing(0,1).subsctring;
a = a.Remove(0, 1);
            a = a.Remove(a.Length - 1, 1);
            if (a.Contains('[') || a.Contains(']') )
            {
                MessageBox.Show("Cannot enter '[' or ']' characters!", "", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            (sender as TextBox).Text = "[" + a.Replace("[", "").Replace("]", "") + "]";

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM