我正在为大学项目开发一个小型POS。 我有一个表单作为POS主窗口,具有数据网格等。另外,我有一个表单是敏感搜索或增量搜索,我希望该表单,在列表框中选择一个项目并将其返回到主窗口。现在我在main中有一个属性,它将该项作为字符串获取,当用户单击搜索表单上的OK按钮时,我想在主窗口上设置该属性。
除了一件事之外,一切都很有效:当我尝试访问listBox_Codigo.SelectedItem.ToString();
时
该应用程序尝试处理和关闭所有窗口...
有人知道为什么吗?
我只需要在该列表框中选择的字符串并将其设置为主窗口,如下所示:
var Principal = (PDQ.Cajero)this.ParentForm;
Principal.CodigoInsertado = listBox_Codigo.SelectedItem.ToString();
this.DialogResult = DialogResult.OK;
this.Close();
其中PDQ.Cajero
是主窗体,它调用此窗体。
更新:我刚刚完成调试,就在程序到达之后
listBox_Codigo.SelectedItem.ToString();
程序跳转到Dispose()
。
更新2 这是我的完整方法:
private void button1_Click(object sender, EventArgs e)
{
if (listBox_Codigo.SelectedItem == null)
{
if (MessageBox.Show(this, "No se puede ingresar un producto sin seleccionarlo.\n ¿Desea intentarlo de nuevo, o Salir?", "Error", MessageBoxButtons.RetryCancel, MessageBoxIcon.Exclamation) == DialogResult.Cancel)
{
DialogResult = DialogResult.Cancel;
this.Close();
}
}
else
{
var Principal = (PDQ.Cajero)this.ParentForm;
Principal.CodigoInsertado = listBox_Codigo.SelectedItem.ToString();
this.DialogResult = DialogResult.OK;
this.Close();
}
}
所以如果值为null,则问题不是......
答案 0 :(得分:4)
可能 没有SelectedItem
(意味着该属性的值为null
)。在这种情况下,您的代码会抛出NullReferenceException
,因为您无法在null
引用上调用函数。因为您没有捕获它,所以应用程序正在尝试退出时将其捕获到更高级别。这就是调用你的Dispose
方法。
答案 1 :(得分:1)
我猜这个表单正在处理,因为你没有处理NullReferenceException
。
我在GUI中进行异常处理的一般经验法则是在所有事件处理程序中都有一个try-catch块,它将异常记录到文件中并通知用户错误。
你对这段代码有什么看法?
private void button1_Click(object sender, EventArgs e)
{
try
{
if (listBox_Codigo.SelectedItem == null)
{
if (MessageBox.Show(this, "No se puede ingresar un producto sin seleccionarlo.\n ¿Desea intentarlo de nuevo, o Salir?", "Error", MessageBoxButtons.RetryCancel, MessageBoxIcon.Exclamation) == DialogResult.Cancel)
{
DialogResult = DialogResult.Cancel;
this.Close();
}
}
else
{
var Principal = (PDQ.Cajero)this.ParentForm;
Principal.CodigoInsertado = listBox_Codigo.SelectedItem.ToString();
this.DialogResult = DialogResult.OK;
this.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
//LogException(ex);
}
}