在c#中捕获异常时出现问题
本文关键字:问题 捕获异常 | 更新日期: 2023-09-27 18:00:08
我有一个包含两个项目的组合框。我还有一个按钮,当选择其中一个项目时,它会打开一个新表单。但是,如果没有选择任何项,则会出现异常(nullpointer)。我尝试过(但没有成功)捕捉这个异常并显示一个提示用户选择其中一个项目的mbox。
这是按钮点击偶数的代码:
if (labelGrid.Text == "Member" && cbTable.SelectedItem.ToString().Equals("Workout"))
{
string name;
string ss;
foreach (DataGridViewRow item in this.dtGrid1.SelectedRows)
{
ss = dtGrid1.CurrentCell.Value.ToString();
name = dtGrid1.SelectedCells[1].Value.ToString();
BookMemberWorkout bmw = new BookMemberWorkout(ss, name);
bmw.Label2.Text = ss;
bmw.Label1.Text = name;
bmw.ShowDialog();
}
}
在非异常情况下,不应该使用异常进行流控制。用户没有选择任何内容的情况肯定不是例外。
正确的方法是简单的null
检查:
if(cbTable.SelectedItem == null)
{
// Show message box
}
else
{
// Your current code
}
为什么您的异常处理代码不起作用是不可能回答的,因为您的问题中没有包含它
我认为问题出在这一行:
ss = dtGrid1.CurrentCell.Value.ToString();
您不能确定该值不是null,所以在调用.ToString().之前应该检查它
您可以使用RequiredValidator来执行javascript验证,而不是使用消息框,从而避免无用的回发。
从性能和可读性的角度来看,我建议在组合框中检查所选值,而不是捕获异常,比如这个
if(cbTable.SelectedItem == null)
{
MessageBox.Show("Please select a value in the combo box.");
return;
}
if (labelGrid.Text == "Member" && cbTable.SelectedItem.ToString().Equals("Workout"))
{
string name;
string ss;
foreach (DataGridViewRow item in this.dtGrid1.SelectedRows)
{
ss = dtGrid1.CurrentCell.Value.ToString();
name = dtGrid1.SelectedCells[1].Value.ToString();
BookMemberWorkout bmw = new BookMemberWorkout(ss, name);
bmw.Label2.Text = ss;
bmw.Label1.Text = name;
bmw.ShowDialog();
}
}
然而,为了回答您的特定查询,您可以捕获NullReferenceException,如下所示:
try{
if (labelGrid.Text == "Member" && cbTable.SelectedItem.ToString().Equals("Workout"))
{
string name;
string ss;
foreach (DataGridViewRow item in this.dtGrid1.SelectedRows)
{
ss = dtGrid1.CurrentCell.Value.ToString();
name = dtGrid1.SelectedCells[1].Value.ToString();
BookMemberWorkout bmw = new BookMemberWorkout(ss, name);
bmw.Label2.Text = ss;
bmw.Label1.Text = name;
bmw.ShowDialog();
}
}
}
catch(NullReferenceException ex)
{
MessageBox.Show("Please select a value in the combo box.");
}