2015-01-19 2 views
-2

Предупреждение. Я очень новичок в C#. В любом случае, у меня есть случайный генератор, который выбирает число, и если число x выбрано, появится моя кнопка x, и она будет повторяться. Однако это иногда работает, а иногда нет. То, что я имею в виду, это кнопка, которая должна быть button1.Visible = true, но когда я нажимаю другую кнопку, кнопка 1 должна уходить, а другая должна появиться, мне нужно, чтобы она работала только с одной кнопкой, но иногда кнопка не видимый вообще. Это странно.Случайная кнопка Внешний вид не работает

Вот один щелчок кнопки:

private void A_Click(object sender, EventArgs e) 
{ 

    if (ao.Visible == true) 
    { 
     ao.Visible = false; 
     Random rnd = new Random(); 
     int y = rnd.Next(1, 7); 

     if (y == 1) 
     { 
      eo.Visible = true; 
     } 
     if (y == 2) 
     { 
      ao.Visible = true; 
     } 
     if (y == 4) 
     { 
      dd.Visible = true; 
     } 
     if (y == 5) 
     { 
      go.Visible = true; 
     } 
     if (y == 6) 
     { 
      eeo.Visible = true; 
     } 
     //  timer1.Stop(); 
     timer1.Start(); 

     label1.Text = "Correct"; 


    } 

    else 
    { 

     label1.Text = "Incorrect"; 
    } 

Кнопка А видна она будет идти к этому событию я просто вставил и сделать его невидимым и еще один видимый. Снова иногда ничего не было видно.

+1

Как насчет 'y == 3'? –

+0

И вот почему я предупреждал вас о том, что я новичок. Спасибо, что так много ... Редактировать: Он по-прежнему не работает – HelpMe

+2

быть новым не является оправдательным оправданием .. в любом случае .. что происходит, когда вы отлаживаете это или просто запускаете его ..? также какова цель «таймера» в вашем коде ..? также почему бы не реорганизовать этот код для использования «switch() case {}' – MethodMan

ответ

2

В описании вы говорите, что вы хотите, чтобы кнопка снова исчезнуть, но вы никогда не устанавливая Visible ложь снова. В этом случае я бы не использовал переключатель.

class RandomButtonForm : Form 
{ 
    private Random rng; 
    private List<Button> buttons; 

    public RandomButtonForm() 
    { 
     this.rng = new Random(); 

     this.buttons = new List<Button>(); 
     this.AddButton(10, 10, "Button 1"); 
     this.AddButton(110, 10, "Button 2"); 
     this.AddButton(210, 10, "Button 3"); 
    } 

    public AddButton(int x, int y, string text) 
    { 
     Button button = new Button(); 
     button.Visible = false; 
     button.X = x; 
     button.Y = y; 
     button.Text = text; 
     this.buttons.Add(button); 
     this.Controls.Add(button); 
    } 

    private void A_Click(object sender, EventArgs e) 
    { 
     int r = this.rng.Next(this.buttons.Count); 

     for (int b = 0; b < this.buttons.Count; b++) 
     { 
      this.buttons[b].Visible = (b == r); 
     } 
    } 
} 

Вместо этого на самом деле используется прямое сравнение для предоставления логического значения для каждой кнопки. Простой пример этого это было бы:

ao.Visible = (y == 1); 
// (y == 1) is either true or false. 

Это означает, что не только кнопки получить отображается, если значение равно 1, он получает HIDDEN, если значение не один, что позволяет прижать «идти» снова и снова.

Этот пример также включает в себя некоторые другие полезные вещи, такие как List<Button> и автоматически используя Count of the random for your random, что упрощает его обслуживание, если вам нужно изменить количество кнопок.

0

Не уверен в том, что происходит в вашем коде, но кажется, что вы хотите, чтобы только одна из кнопок была видимой за раз. Если это так, то сделать что-то вроде:

public partial class Form1 : Form 
{ 

    private Random rnd = new Random(); 
    private List<Button> buttons = new List<Button>(); 

    public Form1() 
    { 
     InitializeComponent(); 
     buttons.Add(ao); 
     buttons.Add(eo); 
     buttons.Add(dd); 
     buttons.Add(go); 
     buttons.Add(eeo); 
    } 

    private void A_Click(object sender, EventArgs e) 
    { 
     int y = rnd.Next(buttons.Count); 
     for (int i = 0; i < buttons.Count; i++) 
     { 
      buttons[i].Visible = (i == y); 
     } 
    } 

}