2011-07-22 7 views
1

私はちょっとした問題に縛られていますが、解決策を実装できないようです。文字列の値を置き換えるという単純な問題C#

ボタンがあり、それぞれに1つの文字があり、正確には26文字(英語のアルファベット)、 いずれかをクリックすると、ループがボタンのテキスト値の文字列を繰り返して置き換えます引用符で囲みます。

コードは機能し、クリックされた文字なしで新しいアルファベットを出力します。しかし、別のボタンをクリックすると、という文字が含まれていても新しいアルファベットが返され、新しいクリック文字が削除されます。文法やスペルのエラーのために申し訳ありません

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

新しいアルファベットにそれぞれの新しいアルファベットを連結したいですか? –

答えて

2

このライン

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

あなたはいつも戻っ"abcdefghijklmnopqrstuvwxyz"に取得し、それを交換していることを意味します。

文字の置き換えを続ける場合は、newAlphabetに交換する必要があります。

+0

良いアイ[filler] –

0

目標は、リストからクリックされた文字を削除する場合:

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

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

MessageBox.Show(newAlphabet); 
0

文字列はC#で不変であることに注意してください。 "newAlphabet"は、変更された "アルファベット"によって継続的に置き換えられています。それは決して固執しません。

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#では、メソッド内で変数を静的に宣言することはできません。

注2:
文字列は不変ですのでalphabet.Replace()はオリジナルに影響を与えることなく、新しい文字列を返します。

+0

通常、最も簡単な答えは正しい答えです、ありがとうございます。 –

+0

はい、私はメソッド内で静的変数を宣言することはできません知っている、すべてのコードはそれぞれ混乱を最小限に抑えるために簡素化されました。 –

関連する問題