无法清除列表框

时间:2015-04-16 22:31:08

标签: c#

我正在使用new按钮,在点击时会重置表单应用程序。 但是我遇到了一个我似乎无法解决的问题。

基本上我想要做的是在点击按钮new时清除列表框。

“新建”按钮应该完全按照初始化程序 启动(但不重新启动应用程序)。如果数据没有 已保存,允许用户(通过MessageBox)确认 继续操作而不保存当前数据或返回当前数据 会话。

以下是我尝试的方法:

private void mnuNew_Click(object sender, EventArgs e)
    { 
        for (int index = 0; index < animalmgr.Count; index++)
        {
            Animal animal = animalmgr.GetAt(index);

            if (animal != null)
            {
                // error message
                DialogResult dialogResult = MessageBox.Show("The data will be lost. Continue?", "Are you sure?", MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.Yes)
                {
                    InitializeGUI();
                }    
                else if  (dialogResult == DialogResult.No)
                {
                }
            }

            else
            {
                ClearLists();  <--------This does not work!
            }
        }
    }


private void InitializeGUI()
        {
            animalmgr.DeleteAll();
            Resultlst.Items.Clear();
            foodItemslst.Items.Clear();
        }

public void  ClearLists()
        {
            Gendercmb.DataSource = Enum.GetValues(typeof(GenderType));
            Categorylst.DataSource = Enum.GetValues(typeof(Categorytype));
            Resultlst.Items.Clear();
            foodItemslst.Items.Clear();
        }

工作原理:如果animal对象不为空,它会显示消息框。

什么行不通:当我加载文件并在列表框中显示对象时,new按钮不会清除列表。原因是因为animal对象在加载文件并显示后为空,但它应该调用else并清除列表,但事实并非如此。

更新

问题不在于ClearLists()方法。问题是if statement似乎永远无法达到要求。问题不在于ClearLists()方法本身。问题是它从未被调用过。

2 个答案:

答案 0 :(得分:2)

我认为问题在于你的逻辑比较

animal != null

查看您的逻辑,上面的行给出了animal一个值,即使该值为0.因此animal 从不 null,因为它始终具有值

答案 1 :(得分:0)

试试这个。

public void  ClearLists()
{
    Gendercmb.DataSource = Enum.GetValues(typeof(GenderType));
    Categorylst.DataSource = Enum.GetValues(typeof(Categorytype));
    Resultlst.DataSource = new List<ListItem>();
    foodItemslst.DataSource = new List<ListItem>();
}

请记住,如果这是一个asp.net webforms应用程序,您还需要在foodItemslst和Resultlst上调用DataBind()dunction。