【问题标题】:How can I force the user to type in a TextBox only between two chars/strings?如何强制用户仅在两个字符/字符串之间输入文本框?
【发布时间】:2016-07-05 23:43:04
【问题描述】:

form1上方

textBox1.Text = "TextToSearch{}";

首先,我想强制用户只能在两个{ } 之间的TextToSearch{} 内输入,如果有多个:

TextToSearch{},TextToSearch{} 那么用户将只能在两个位置的两个{ } 之间输入。在TextBox 区域的其余部分,他将无法输入。

我想稍后使用这个TextToSearch{} 作为多个文本搜索之间的分隔符。例如:

TextToSearch{hello}

它将搜索单词hello

还有:

TextToSearch{hello},TextToSearch{hi}

现在它应该搜索hellohi 不是 hellohi 而是分开 hellohi。 所以我还需要将这些文本解析为string array。 之前我只使用, 来分隔。

string[] values = textBox1.Text.Split(',');

hello,hi 

这很容易。 但是现在文本在{ } 之间的TextToSearch{} 中,并且还用, 分隔,例如:

TextToSearch{hello},TextToSearch{hi}

所以我需要取出hellohi 并将它们放入值array

【问题讨论】:

  • 你可以在用逗号分割之后添加 TextToSearch{} 吗?用户真的需要看吗?
  • 使用MaskedTextBox
  • @AlexanderPetrov MaskedTextBox 不适合此要求,因为用户可能输入的字符数未知。

标签: c# .net winforms


【解决方案1】:

与其尝试从TextBox 获得这样的功能——这不能简单地实现——我建议你专注于你应该解决的主要问题:

让用户搜索一些词组,每个词组可以是一个词也可以是多个词。

选项 1 - 作为一个选项,您可以使用 , 分隔搜索短语。

string input = this.textBox1.Text;
var parts = input.Split(',').ToList();
parts.ForEach(x => MessageBox.Show(x));

输入: Split,string,with,white spaces,or,double quotes
零件: Split string with white spaces or double quotes

选项 2 - 作为另一个选项,您可以要求用户用空格分隔单词。此外,如果他们想将一些词放在一起作为搜索词组,他们可以将这些词放在"" 之间。为此,您可以使用multiple methods。例如:

//using System.Text.RegularExpressions;

string input = this.textBox1.Text;
var parts = Regex.Matches(input, @"[\""].+?[\""]|[^ ]+")
                 .Cast<Match>()
                 .Select(x => x.Value.Trim('"'))
                 .ToList();
parts.ForEach(x => MessageBox.Show(x));

输入: Split string with "white spaces" or "double quotes"
零件: Split string with white spaces or double quotes

如果以上选项都不能满足您的要求,您可以对多个部件使用多个TextBox 控件。

【讨论】:

  • Reza 使用 ',' 来分隔我已经做到了,问题是如果用户输入的文本在某些地方包含 ',' 逗号怎么办?这就是我想使用这个 TextToSearch{} 的原因。其次,如果我真的需要零件,您之前写过……当他在文件内容中进行搜索时,让用户选择进行多次搜索不是逻辑吗?
  • 用户可以选择搜索单个词或包含多个词的短语是完全合理的。我分享了这些选项,让您在应用程序中拥有该功能。这两个选项都适用。如果用户需要包含一个特殊字符(, 在第一种方法中或" 在第二种方法中),您可以为其使用转义模式,例如您可以要求他们使用,, 而不是短语中的,并简单地将其替换为特殊字符串行 {comma} 或新生成的 guid,然后拆分并最后放入 ,, 而不是特殊字符串。
  • 对于最后一个选项,您可以简单地要求他们使用多个动态文本框,甚至单个文本框和一个按钮,然后单击按钮后将文本框的文本添加到列表中。这样他们就可以写一个短语或一个单词并将其添加到列表中,然后写下一个短语或单词等等。最后,他们可以要求您使用列表进行搜索,也可以通过按删除按钮选择它们来简单地从列表中删除项目。我建议您不要再为此类问题浪费您的类型,选择一种解决方案并创建应用程序的其余部分。希望你的答案有用。
【解决方案2】:

尝试使用MaskedTextBox,如下所示。

MaskedTextBoxForm,设置其属性:

maskedTextBox.Mask = @"TextToSe\arch{C}"; // C - any non-control character
maskedTextBox.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals;

设置TextChanged事件处理程序:

private void MaskedTextBox_TextChanged(object sender, EventArgs e)
{
    int count = maskedTextBox.Text.Length + 1;

    maskedTextBox.Mask = @"TextToSe\arch{" + new string('C', count) + "}";
}

用户输入的文字可以从Text属性中获取:

string textToSearch = maskedTextBox.Text;

恕我直言,这很方便。但仅适用于单个搜索字符串。

【讨论】:

    猜你喜欢
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 2020-06-26
    相关资源
    最近更新 更多