禁用C#上的按钮问题

时间:2010-02-16 13:49:42

标签: c# listbox button

好的,我试图通过使用多个按钮将项目从一个列表框移动到另一个列表框,即

我有2个按钮cmdRight和cmdRight2,它们在表单加载时都被禁用

如果用户选择第一个列表框中的单个项目,则cmdRIght按钮启用但仍禁用cmdRight2,如果用户在第一个列表框中选择多个项目,则cmdRight2按钮启用但cmdRight已禁用。

我有移动按钮可以工作,但我遇到的问题是使用cmdRight2按钮移动多个项目后cmdRight按钮启用(它不应该只在选择列表框中的单个项目后启用)。我已经尝试了很多if语句等但它仍然会发生。

我是C#的新手,所以任何帮助都会受到赞赏。

谢谢

        private void lbList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.lbList1.SelectedItems != null)
            {
                cmdRight.Enabled = true; //enable cmdRight
                cmdClear.Enabled = true; //enable cmdClear
                if (this.lbList1.SelectedItems.Count > 1)//if multiple items selected
                {
                    cmdRight.Enabled = false;
                    cmdRight2.Enabled = true; //enable cmdRight2              
                }
            }
        }


    private void cmdRight2_Click(object sender, EventArgs e)
    {
        foreach (int i in lbList1.SelectedIndices)
        {
            lbList2.Items.Add(lbList1.Items[i].ToString());
        }
        while (lbList1.SelectedItems.Count > 0)
        {
            lbList1.Items.Remove(lbList1.SelectedItems[0]);
        }
        cmdRight2.Enabled = false;

    }

    private void cmdRight_Click(object sender, EventArgs e)
    {
        lbList2.Items.Add(lbList1.SelectedItem); //Add selected item from list1 to list2
        lbList1.Items.Remove(lbList1.SelectedItem);//remove the selected item in list1

        cmdRight.Enabled = false; //disable cmdRight
    }

3 个答案:

答案 0 :(得分:3)

如何根据给定标准创建一个启用/禁用按钮的方法EnableButtons,例如“仅当......为真时启用cmdRight2”。

然后,只要某些条件可能发生变化,就调用该方法。这样做的好处在于你现在正在做的方式是方法中的标准是“绝对的”(因为按钮一次启用或禁用)而不是“相对”(当用户启用按钮)是这样还是那样。)

您也可以从Application.Idle事件调用此方法,而不是在响应某些用户操作时调用它。

编辑

声明以下方法:

private void EnableButtons()
{
    controlX.Enabled = (<condition...>);
    controlY.Enabled = (<condition...>);
}

您可以从代码中的位置调用该方法,其中某些内容应在按钮的启用状态中发生变化,或者您可以在表单的构造函数中执行以下操作:

public Form1()
{
    // Other code...

    Application.Idle += new <The respective event handler>;
}

然后,使用相应的事件签名声明一个方法,并在那里调用EnableButtons。在应用程序处于“空闲”状态(等待用户操作)的情况下,将调用此方法。

答案 1 :(得分:1)

我想你想要

if (this.lbList1.SelectedItems.Count == 1)
{
}
else if(this.lbList1.SelectedItems.Count > 1)
{
}
else
{
}

而不是

if (this.lbList1.SelectedItems != null)

然后你可以将所有这些放在一个名为“EnableButtons”的方法中,如其他地方所述

答案 2 :(得分:0)

问题是您要逐个删除项目,因此当只剩下一个项目时,您实际上选择了一个项目,因此您的程序将启用cmdRight。最简单的方法就是

cmdRight2.Enabled = false;
cmdRight.Enabled = false;

在cmdRight2_Click方法的末尾。