尝试保存空列表框时引发错误

时间:2010-10-12 09:19:09

标签: c# winforms listbox

当用户点击“保存”并且列表框中没有任何内容时,我想提出错误。 我想我会像这样使用try catch块:

try
{
   //when you go to save, and the list box is empty, you should get an error message
   if (dataListBox.Items.Equals(null))
      throw new Exception();

   //i wanted to save on the form_close event, so i put the save data into a method and just call the method from this event 
   this.save();
}
catch (Exception err)
{
   //spits out the errors if there are any
   MessageBox.Show(err.Message, "List Box is empty", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

但这不适合我。它仍然保存,没有消息框出现。

4 个答案:

答案 0 :(得分:0)

尝试添加:

if(dataListBox.Items.Count==0)
            throw new Exception();

顺便说一句,尝试在这里定义自己的Exception类,例如EmptyListException,然后你就可以确定你准确捕获了你想要捕获的内容。现在,此代码将为“Save”方法中引发的异常显示相同的MessageBox。

答案 1 :(得分:0)

您需要检查:

if(dataListBox.Items.Count ==0)
   throw new Exception();

答案 2 :(得分:0)

您应该使用.Count()代替。

if (dataListBox.Items.Count < 1)
    throw new Exception();

答案 3 :(得分:0)

根本不要这样做。比较:

try
{
//when you go to save, and the list box is empty, you should get an error message
    if (dataListBox.Items.Count != 0)
        throw new Exception("Please add at least one item to the list.");

    this.save();
}
catch (Exception err)
{
    //spits out the errors if there are any
    MessageBox.Show(err.Message, "List Box is empty", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

使用:

    if (dataListBox.Items.Count != 0)
    {
        MessageBox.Show("Please add at least one item to the list.", "List Box is empty", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    else
    {
        this.save();
    }
  1. 不使用控制流异常更有效。是的,效率并非一切,但过早的悲观化也没有意义。
  2. 验证失败不是例外,因为我们期望它们。如果代码已经达到了它试图保存的程度,并且由于缺少数据而在逻辑上是不可能的,那么可能是一个例外(但是应该在更高的验证中被捕获的那个)代码 - 特别是代码)。如果由于文件系统错误,数据库连接错误等而导致保存失败,那么这是一个例外。用户验证虽然不是例外,但只有在我们需要与更高级别的代码进行对话时才应该报告(同样,如果可能通过控制流机制,该代码应该已经捕获它)。 LI>
  3. 它可以更容易地发现逻辑错误。因为我们已经分离了异常和非特殊情况,我们可以看到我们没有寻找真正可能的异常。原样,如果您有一个用户正确填写列表,但由于一个真正的异常导致保存失败,您将在消息框的标题中说“列表框为空”,这将使用户感到困惑。现在这变得更加平坦,并且更容易修复该错误:

    if (dataListBox.Items.Count != 0)
    {
        MessageBox.Show("Please add at least one item to the list.", "List Box is empty", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    else
    {
        try
        {
            this.save();
        }
        catch(Exception ex)
        {
             MessageBox.Show("Saving failed.\n Technical details:\n" + ex.Message, "Saving Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }