2016-12-17 5 views
0

私はちょっとジャムに陥りました。私はアプリ全体にアルファベットをコーディングしようとしたので、文字を1つずつ入力するような気がしなかったので、ASCII文字を使用してforループを使用してボタンとして挿入しました。だから、今私は自分のニーズに応じてクリックするためのボタンが必要ですが、どういうわけか、問題の原因を突き止めるようです。コードは以下の通りです:ボタンクリックアクションは、自分自身に割り当てられているメソッドを登録しません。

private void Hangman_OnLoaded() 
{ 
    const int btnSize = 35; 
    var c = 0; 

    for (var i = 65; i <= 90; i++) 
    { 
     var btn = new Button { 
      Content = (char) i, 
      Click += GuessClick() 
     }; 
     btn.Width = btn.Height = btnSize; 
     var margin = btn.Margin; 
     margin.Left = c += 37; 
     btn.Margin = margin; 
     GridMain.Children.Add(btn); 
    } 
} 

private void GuessClick(object sender, EventArgs e) { 

    var choice = sender as Button; 
    if (choice == null || !copyCurrent.Contains(choice.DataContext.ToString())) return; 
    var temp = copyCurrent.ToCharArray(); 
    var find = copyCurrent.ToCharArray(); 
    var guessChar = choice.DataContext.ToString().ElementAt(0); 

    for (var index = 0; index < find.Length; index++) { 
     if (find[index] == guessChar) { 
      temp[index] = guessChar; 
     } 
    } 
    copyCurrent = new string(temp); 
    DisplayTheWord(); 
} 
+2

正確には動作していないものは不明です。あなたの 'GuessClick'メソッドが呼び出されていませんか?あなたが見ていないことを期待している副作用はありますか?あなたはデバッガに接続して何かを検証しましたか?何が機能していないのかを明確にしてください。 – pstrjds

+1

_これで私のニーズに合わせてボタンをクリックする必要がありますが、何とか問題の原因を突き止めるようです._ ...あなたはそのコードで何を達成しようとしているのか教えてください、**、**現在行われていること、または現在行われていないこと。 –

答えて

0

私はこのコードを「精神的なデバッグ」で刺すでしょう。そこを向上することができるものの多くは、あるなど、変更しましたが、私はあなたが問題を有していないことがことができる場合は、このです推測しています:

var temp = copyCurrent.ToCharArray(); 
var find = copyCurrent.ToCharArray(); 
var guessChar = choice.DataContext.ToString().ElementAt(0); 
for (var index = 0; index < find.Length; index++) { 
    if (find[index] == guessChar) { 
     temp[index] = guessChar; 
    } 
} 
copyCurrent = new string(temp); 

どんなにguessCharが何であるか、このコードブロックの終わりにcopyCurrentは変更されません(実際の文字列の内容はcopyCurrentです)。まず、2つの配列を同一にします。次に配列をループして、guessCharを探しています。 guessCharが見つかった場合は、tempの配列にguessCharという文字を「修正」して、見つけた同じインデックスにfindという文字列を追加します。両方の配列が同一であるため、最終的な結果は「変更」が起こらないことです。ループを実行すると、配列tempから新しい文字列を作成していますが、findtempは同じループであり、変更されていないので、最初に入力した文字列と同じ新しい文字列を作成します。私はあなたがこのコードが何をすることを期待しているのか分からないが、私はこれがそうではないと仮定している。

これはハングマンのゲームで、ゲームの初めにcopyCurrentには「????」のような内容があると仮定します。 answerと呼ばれるその他の変数があり、コンテンツには「food」などが含まれているとします。その場合は、次の2行を変更するだけです。

var temp = copyCurrent.ToCharArray(); 
var find = answer.ToCharArray(); 
関連する問題