我正在使用visualstudio编写一个扫描程序。
如下面的代码所示,我对文本框(名称为txt_item)进行了一些检查,其中一项检查是检查数据库如果该项存在于数据库中,它将执行某些操作。否则将提示一条错误消息,要求包装商重新扫描条形码并清除"txt_item"文本框中的内容。
消息框应该一次提示出来,但现在它出现了两次。有人知道我该怎么解决这个问题吗?
private void txt_item_TextChanged(object sender, EventArgs e)
{
SqlConnection Conn = Global_Variable.GetConnectionString();
SqlCommand cmd;
cmd = new SqlCommand("Select statement...", Conn);
try
{
if (Conn.State == ConnectionState.Closed)
{
Conn.Open();
}
cmd.CommandType = CommandType.Text;
SqlDataReader sdr = cmd.ExecuteReader();
if (sdr.HasRows != null && sdr.HasRows)
{
cmd.Dispose();
sdr.Dispose();
SqlDataAdapter itemDataAdapter = new SqlDataAdapter(cmd);
DataTable itemDataTable = new DataTable();
itemDataTable.Rows.Clear();
itemDataAdapter.Fill(itemDataTable);
// blah blah blah...
return;
}
else
{
if (MessageBox.Show("Invalid Item, Please re-enter again.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) == DialogResult.OK)
{
txt_item.Clear(); ;
}
return;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
cmd.Dispose();
if (Conn.State == ConnectionState.Open)
{
Conn.Close();
}
}
}
您正在清除文本更改事件中的文本框。清除文本将再次调用此事件。不要使用return;statment,连接最终自动处理。
首先感谢您的建议和指导。最后,我找到了解决这个问题的办法。
感谢。:)
解决方案如下:
if (MessageBox.Show("Invalid Item: '" +txt_item.Text+ "', Please re-enter again.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) == DialogResult.OK)
{
// Code added
txt_item.TextChanged -= txt_item_TextChanged;
txt_item.Clear();
txt_item.TextChanged += txt_item_TextChanged;
return;
}