使用if语句查看是否在Windows窗体C中单击了一个按钮#

时间:2016-05-27 16:40:42

标签: c# winforms button listbox click

我有一个Windows窗体应用程序,用于练习冒泡排序算法。基本上我有四个不同的单选按钮,每个按钮在单击时在列表框中显示一定数量的随机整数。我想要的是能够点击一个按钮"排序"然后对该列表框中的所有整数进行排序。由于每个单选按钮在列表框中显示不同的整数,我必须在radioButton1_CheckedChange方法下执行此操作,因此我可以轻松访问为列表框创建的随机数组。我目前正在努力获取我的代码,使button1_Clicked事件处理程序设置为" true"单击按钮时。以下是我的代码的摘录,向您展示我的意思。

bool buttonClick = false;
    private void button1_Click(object sender, EventArgs e)//When button is clicked, button click is true
    {
        buttonClick = true;
    }

    private void radioButton1_CheckedChanged(object sender, EventArgs e)//Max 100 button
    {
        int smallMaxSize = 101;
        int[] array = new int[smallMaxSize];

        Random numGenerator = new Random();

        numGenerator.Next(smallMaxSize);

        for (int i=0; i<101; i++)//Generates 100 random numbers from 1-100
        {
            array[i] = numGenerator.Next(smallMaxSize);
            Numbers.Items.Add(array[i]);
        }   

        if (buttonClick == true)
        {
            Numbers.Items.Clear();
            int Out;
            int In;

            for (Out = smallMaxSize - 1; Out > 1; Out--)
            {
                for (In = 0; In < Out; In++)
                {
                    if (array[In] > array[In + 1])
                    {
                        int temp = array[In];
                        array[In] = array[In + 1];
                        array[In + 1] = temp;
                    }
                }
            }
        }

正如您所看到的,我为按钮单击设置了一个私有bool,它始终设置为false。在button1_Click事件处理程序下,每当&#34;排序&#34;单击按钮。然后我有一个&#34; if&#34;单选按钮方法下的语句表示&#34;如果buttonClick == true,则运行此代码&#34;。当我运行代码并单击&#34;排序&#34;按钮,没有任何反应。任何人都有任何想法可以引导我朝着正确的方向前进吗?

2 个答案:

答案 0 :(得分:0)

如果您选中其中一个复选框,则代码当前会运行排序算法。那是因为您的排序逻辑位于复选框检查事件(radioButton1_CheckedChanged方法)的处理程序中。这意味着如果单击复选框,radioButton1_CheckedChanged方法中的所有内容都将运行。但那不是你想要的。如果您希望在单击按钮时运行排序方法,则它必须位于button1_click方法内。

你的bool变量或多或少没用。

试试这个:

    private void button1_Click(object sender, EventArgs e)//When button is clicked, button click is true
    {
        int smallMaxSize = 101;
        int[] array = new int[smallMaxSize];

        Random numGenerator = new Random();

        numGenerator.Next(smallMaxSize);

        for (int i=0; i<101; i++)//Generates 100 random numbers from 1-100
        {
            array[i] = numGenerator.Next(smallMaxSize);
            Numbers.Items.Add(array[i]);
        }   

        if (buttonClick == true)
        {
            Numbers.Items.Clear();
            int Out;
            int In;

            for (Out = smallMaxSize - 1; Out > 1; Out--)
            {
                for (In = 0; In < Out; In++)
                {
                    if (array[In] > array[In + 1])
                    {
                        int temp = array[In];
                        array[In] = array[In + 1];
                        array[In + 1] = temp;
                    }
                }
            }
        }
    }

答案 1 :(得分:0)

Windows Forms是事件驱动编程意味着事情只发生在事件发生时,这通常是用户与表单的交互,但它可以是计时器,循环等。

您的问题是您在radioButton1_CheckedChanged方法中使用冒号排序代码,该方法仅在radioButton1已检查属性更改时触发。基本上发生的事情是,当您单击radiobutton时,您正在创建随机值,然后检查按钮是否被单击,这显然不是因为您仍然在radioButton1_CheckedChanged

您需要将冒泡排序代码移动到button1_Click方法或者您可以先单击排序按钮,然后单击单选按钮。

int[] array;
int smallMaxSize = 101;
private void button1_Click(object sender, EventArgs e)//When button is clicked, button click is true
{
    int Out;
    int In;

    for (Out = smallMaxSize - 1; Out > 1; Out--)
    {
        for (In = 0; In < Out; In++)
        {
            if (array[In] > array[In + 1])
            {
                int temp = array[In];
                    array[In] = array[In + 1];
                    array[In + 1] = temp;
                }
            }
        }
}

private void radioButton1_CheckedChanged(object sender, EventArgs e)//Max 100 button
{
    Numbers.Items.Clear();
    array = new int[smallMaxSize];

    Random numGenerator = new Random();

    numGenerator.Next(smallMaxSize);

    for (int i=0; i<101; i++)//Generates 100 random numbers from 1-100
    {
        array[i] = numGenerator.Next(smallMaxSize);
        Numbers.Items.Add(array[i]);
    }
}