2011-07-22 33 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

是的,我知道我不能在方法中声明静态变量,所有的代码都被简化了,以尽量减少混淆。 –