好的,我试图通过使用多个按钮将项目从一个列表框移动到另一个列表框,即
我有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
}
答案 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方法的末尾。