2011-07-22 65 views
1

我在一個應該平庸的問題上有點麻煩,但看起來我無法實現該解決方案。替換字符串值C的簡單問題#

我有按鈕,每個人都有一個字符,26是準確的(英文字母), 當我點擊其中的任何一個時,循環遍歷按鈕上文本值的字符串並替換它帶引號。

該代碼起作用,並且它打印出沒有點擊字符的newAlphabet。但是當我點擊另一個按鈕時,它會返回新的字母,儘管之前刪除的字符並移除了新點擊的字符。

的代碼如下

static string alphabet = "abcdefghijklmnopqrstuvwxyz"; 
static string newAlphabet = string.Empty; 
Button tempBtn = (Button)sender; 

for (int i = 0; i < alphabet.Length; i++) 
{ 
    if (alphabet[i].ToString().Contains(tempBtn.Text)) 
    { 
    newAlphabet = alphabet.Replace(tempBtn.Text, ""); 

    MessageBox.Show(newAlphabet); 
    } 
} 

對不起,語法或拼寫錯誤,英語不是我的第一語言。

問候,HC

+0

你真的想在這個事件處理程序的循環內顯示消息框嗎? –

+0

Messagebox僅用於測試目的。 –

+0

你想要將每個新的字母連接到newAlphabet? –

回答

2

此行

newAlphabet = alphabet.Replace(tempBtn.Text, ""); 

意味着你總是又回到了"abcdefghijklmnopqrstuvwxyz"和更換這一點。

如果要繼續替換字母,則需要替換爲newAlphabet

+0

好眼[填充] –

0

如果目標是消除從列表中點擊字母:

static string newAlphabet = "abcdefghijklmnopqrstuvwxyz"; 
Button tempBtn = (Button)sender; 

newAlphabet = newAlphabet.Replace(tempBtn.Text, ""); 

MessageBox.Show(newAlphabet); 
0

請注意,字符串在C#中不可改變的。 「新字母」正在不斷被修改的「字母表」所取代。它永遠不會堅持下去。

1

一個簡單的解決辦法是:

static string alphabet = "abcdefghijklmnopqrstuvwxyz"; 

private void button1_Click(object sender, EventArgs e) 
{ 
    var tempBtn = (Button)sender; 
    alphabet = alphabet.Replace(tempBtn.Text, ""); 
    MessageBox.Show(alphabet); 
} 

注1:
如果您發佈的代碼是在按鈕單擊事件方法,那麼它將無法編譯。在C#中,你不能在方法中聲明變量static。

注2:
字符串是不可變的如此alphabet.Replace()返回一個新字符串,而不會影響原來的。

+0

通常最簡單的答案是正確答案,謝謝。 –

+0

是的,我知道我不能在方法中聲明靜態變量,所有的代碼都被簡化了,以儘量減少混淆。 –