2016-07-05 28 views
-1

form1如何強制用戶只在兩個字符/字符串之間鍵入文本框?

textBox1.Text = "TextToSearch{}"; 

一頂我要強制用戶只能夠之間的TextToSearch{}內鍵入兩個{ },如果有不止一個:

TextToSearch{},TextToSearch{}那麼用戶將能夠在兩個地方只輸入兩個{ }之間。在TextBox區域的其餘部分,他將無法輸入。

我想稍後使用TextToSearch{}作爲多個文本搜索之間的分隔符。例如:

TextToSearch{hello} 

它將搜索詞hello

和:

TextToSearch{hello},TextToSearch{hi} 

現在應該尋找hellohihellohi獨立hellohi。 所以我也需要解析這個文本到string array。 之前我只用,來分開。

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

hello,hi 

這很容易。 但現在的文本是在{ }之間TextToSearch{}並且還通過,例如分開處理:

TextToSearch{hello},TextToSearch{hi} 

所以,我需要拿出hellohi,並把他們在價值array

+3

在逗號分隔後,您可以直接添加TextToSearch {}嗎?用戶是否真的需要看到它? –

+0

使用'MaskedTextBox'。 –

+0

@AlexanderPetrov MaskedTextBox不適合此要求,因爲用戶輸入的字符數目未知。 –

回答

1

,而不是試圖讓從TextBox這樣的功能 - 這不能簡單地實現 - 我建議你專注於你應該解決的主要問題:

讓用戶搜索一些短語,每個短語可以成爲一個單詞或多個單詞。您可以使用,來分隔搜索詞組。

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

輸入:Split,string,with,white spaces,or,double quotes
部分:Splitstringwithwhite spacesordouble 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"
部分:Splitstringwithwhite spacesordouble quotes

如果上述選項滿足您的要求,您可以使用多個爲多個部分TextBox控制。

+0

Reza使用','分開我已經做到了這個問題是,如果用戶輸入一個文本,在某些地方包含','逗號?這就是爲什麼我想使用這個TextToSearch {}。其次,你之前寫過,如果我真的需要零件......當他在文件內容中進行搜索時,是否允許他們選擇進行多重搜索? –

+1

用戶可以選擇搜索包含多個單詞的單個單詞或短語,這是完全合理的。我分享了這些選項,讓您在應用程序中擁有該功能。兩種選擇都適用。如果用戶需要包含一個特殊字符(','在第一種方法中,或在第二種方法中'''),你可以使用轉義模式,例如你可以讓他們使用'''而不是','在短語,並簡單地用一個特殊的字符串行'{comma}'或一個新生成的guid替換它,然後分割並最後放上',,'而不是特殊的字符串 –

+1

也可以用最後一個選項讓它們使用多個動態文本框,甚至單個文本框和一個按鈕,然後在點擊按鈕後將文本框文本添加到列表中,這樣他們可以編寫一個短語或一個單詞並將其添加到列表中,然後編寫下一個短語或單詞等等,最後他們可以要求你使用列表進行搜索,也可以通過按下刪除按鈕來從列表中刪除項目,我建議你不要再浪費你的類型來解決這個問題,選擇一個的解決方案,並創建應用程序的其餘部分。希望您找到有用的答案。 –

0

嘗試使用MaskedTextBox,如下所示。

Plase MaskedTextBoxForm,設置其屬性:

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

設置TextChanged事件hanlder:

string textToSearch = maskedTextBox.Text; 

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

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

用戶輸入的文本可以從Text屬性獲得

Imho,這是相當方便。但僅適用於單個搜索字符串。

相關問題