2017-01-21 10 views
0

私のプログラムでは、キューブ形式の5つの異なるラベルが作成され、ドロップダウンします。私がそれらを押すと、彼らは見えなくなる。私はそれらのすべてが目に見えないかどうかチェックしたいが、そうする方法がわからない。このサイトを試してみると、ブールとの解決策が見つかりましたが、それは自分のやり方では機能しません。私のラベルが表示されても、そのうちの4つしか表示されません。 LINQのを使用してC#すべての配列要素が表示されているかどうかをチェックする方法

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    Label [] kubeliai = new Label [5]; 
    int poz = 100; 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     for (int i = 0; i < kubeliai.Length; i++) 
     { 
      kubeliai[i] = new Label(); 
      Controls.Add(kubeliai[i]); 
      Random pos = new Random(); 
      kubeliai[i].Top = 50; 
      kubeliai[i].Left = poz; 
      poz += pos.Next(50, 200); 
      kubeliai[i].BackColor = Color.Red; 
      kubeliai[i].Height = 20; 
      kubeliai[i].Width = 20; 
      kubeliai[i].Click += new EventHandler(kubelio_clickas); 
     } 

     Timer kritimo_laikrodis = new Timer(); 
     kritimo_laikrodis.Interval = 10; 
     kritimo_laikrodis.Tick += new EventHandler(laikrodis); 
     kritimo_laikrodis.Enabled = true; 
    } 
    void kubelio_clickas (object sender, EventArgs e) 
    { 
     ((Label)sender).Visible = false; 
    } 
    void laikrodis (object sender, EventArgs e) 
    { 
     for (int i = 0; i < kubeliai.Length; i++) 
     { 
      kubeliai[i].Top += 1; 
      if (kubeliai.All.Visible == false) // this is an error 
      { 
       kubeliai[i].Visible = true; 
       kubeliai[i].Top = 50; 
       Random pos = new Random(); 
       poz += pos.Next(50, 200); 

      } 
     } 
    } 
+1

配列をループし、可視プロパティをチェックします。ところで、ループの外で一度ランダムオブジェクトを作成する必要があります。実際にフォーム全体で1つのフォーム/コールレベルを作成してください。 – Plutonix

+0

'kubeliai.All.Visible == false'はエラーですか?..あなたの質問にそのことを示してください。 –

答えて

0

私のラベルはあなたが唯一の4それらのを見ることができます表示されたときに、すべてがこのように

var areAllInvisible = kubeliai.All(l => l.Visible == false); 
if (areAllInvisible) 
{ 
    // do something 
} 
0

見えない場合は、確認することができます。

これは、乱数をピックする方法が毎回同じ番号を選んでいるため、ラベルを重ねて配置するためです。 Random()ドキュメントの最初の段落を読む:デフォルトコンストラクタを呼び出して近くに連続して作成され

異なるランダムオブジェクトは、同一のデフォルトのシード値を持つことになり、したがって、乱数の同じセットを生成します。この問題は、単一のRandomオブジェクトを使用してすべての乱数を生成することで回避できます。このようなあなたのクラス定義で一度

使用new Random()

Label [] kubeliai = new Label [5]; 
Random pos = new Random(); 

そして、あなたのプログラムの中で他のどこでも、それを削除します。

関連する問題