2016-05-23 7 views
0

私は単純なマッチングゲームを作る必要があります。このマッチするゲームで、私はそれをクリックするとイメージを表示する必要があります。クリックイベントの前には色しか表示されません。私も、私は最終的に割り当てられた画像とラベルのために2つの他のリストを作成しなければならなかったことを考えクリックイベントでラベルイメージを表示する方法

private void imgToLbl() 
    { 
     foreach (Control ctrl in tableLayoutPanel1.Controls) 
     { 
      Label imgLbl = ctrl as Label; 
      if (imgLbl != null) 
      { 
       int rndNum = rndImage.Next(0, files.Count); 
       imgLbl.Image = files[rndNum]; 
       lbls.Add(imgLbl); 
       imags.Add(imgLbl.Image); 
       ints.Add(rndNum); 
       files.RemoveAt(rndNum); 
      } 
     } 
    } 

:私はまだのようなラベルに画像を割り当て方法を持っています。そこで、インデックスインジケータとしてintsリストを使用して、clickイベントでそれらを再度割り当てることができます。

private void label_click(object sender, EventArgs e) 
    { 
     Label clickLbl = sender as Label; 

     if (clickLbl != null) 
     { 

     } 
    } 

私の考えは、私は、何とか、ラベルリストにclickLblのTEインデックスをチェックする必要があることです:私はすでに私のクリックイベントの一部を持っています。しかし、私はどのように知りません。私はここで完全に間違っているかもしれませんが、私はこれについて良い方法を聞きたいと思います。誰かが私を助けてくれますか?私は現時点では本当に無知です。

これらは、それが通過する必要がある手順です。アプリケーションは、ユーザーがラベルは、それが中に割り当てられたイメージだが表示されますクリックするとラベルが画像

  • を持つべきではありません起動すると

    1. imgToLbl()メソッド

    2. 画像は、現在表示されて

    注:

    ラベルの代わりにピクチャボックスを使用することはできません。私たちはラベルを使用しなければなりません。そうでなければ、私はこの質問をしていません。

  • +2

    あなたの「メモ」は、あなたが「ピクチャボックス」を扱っていた場合の対処方法を知っているように見えます。あなたはその場合に何をするのか、そして 'Label'sに同じロジックを適用するときにどんな問題があるのか​​説明できますか?とにかく、あなたが正確に何をしようとしているのかは不明です。ラベルをクリックすると何が起こるはずですか?どの画像を表示する必要がありますか、なぜですか? – CodeCaster

    +0

    画像ボックスでは画像の表示を設定できますが、ラベルでは表示できません。これは私にとって厄介なものです –

    +0

    何かが見えない場合は、Clickイベントも発生させることはできません。あなたの質問を[編集]し、何が起こるべきか、どこに止まっているのかを段階的に説明してください。 – CodeCaster

    答えて

    2

    関連性の低いコードがたくさんあるようですが、関連するコードがいくつか省略されています。だから、あなたが実際に求めていることをリバースエンジニアリングする必要があります。

    N個のイメージファイルのコレクションがあり、フォームにN個のラベルコントロールを含むパネルがあるようです。イメージをラベルにランダムに割り当てたいが、ラベルがクリックされたときにのみラベルにイメージを表示する。

    まず、the General Naming Conventionsに従うことを強くお勧めします。ハンガリー語の表記や略語の使用はお勧めしません。

    あなたの問題は、Control.Tagプロパティを使用して解決できます。ここでは、コントロールに関する情報を保存できます。

    だからあなたの「imgToLbl」メソッドは、このようになります。

    private List<Image> _files = { /* however this works */ }; 
    
    private void RandomizeImages() 
    { 
        // Randomize the file list. 
        // See http://stackoverflow.com/questions/273313/randomize-a-listt 
        Shuffle(_files); 
    
        int imageIndex = 0; 
    
        // Loop over all labels to assign an image index. 
        foreach (Control control in tableLayoutPanel1.Controls) 
        { 
         var imageLabel = control as Label; 
         if (imageLabel == null) 
         { 
          continue; 
         } 
    
         imageLabel.Tag = imageIndex; 
         imageIndex++; 
        } 
    } 
    

    ラベルをクリックすると、あなたがタグの値を検査しにそれを使用できるように、この方法は、Label.TagプロパティにList<Image>のインデックスを保存します

    private void Label_Click(object sender, EventArgs e) 
    { 
        Label clickedLabel = sender as Label; 
    
        if (clickedLabel != null) 
        { 
         var imageIndex = (int)clickedLabel.Tag; 
         clickedLabel.Image = _files[imageIndex]; 
        } 
    } 
    
    0

    tableLayoutPanel1.Controls.GetChildIndex(clickLbl)を使用してコントロールのインデックスを取得してください。これは、現在ラベルをどのように初期化するかに対応しています。

    自分でList<Label>のコントロールへの参照を保持し、親コントロールにプログラムで追加することもできます。これにより、デザイナーでの作業が節約できます。 WinFormsがそのControlをどのように制御するかに依存しません。

    また、インデックスを完全に制御できるため、たとえば画像のList<Image>と一致させることができます。

    関連する問題