随机按钮外观不起作用

时间:2015-01-19 19:03:14

标签: c# winforms

警告,我对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";
    } 

按钮A是可见的,它会转到我刚刚粘贴的那个事件,使其不可见,另一个可见。有时再也看不到任何东西了。

2 个答案:

答案 0 :(得分:2)

在您的说明中,您说您希望按钮再次消失,但您再也不会将Visible设置为false。在这种情况下,我实际上不会使用开关。

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,则不仅显示按钮,如果值不是1,则会显示隐藏,允许您按下&#34; go&#34;按钮一遍又一遍。

此示例还包含一些其他有用的内容,例如List<Button>,并自动使用随机的Count of Count,如果您需要更改按钮的数量,则可以更轻松地维护它。

答案 1 :(得分: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);
        }
    }

}