我正在使用visual studio编写扫描程序。
如下面的代码所示,我对文本框进行了一些检查(名称为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();
}
}
}
答案 0 :(得分:1)
您正在清除文本更改事件中的文本框。清除文本将再次调用此事件。 不要使用退货;声明,连接最终自动处理。
答案 1 :(得分:1)
首先感谢您的建议和指导。 最后,我找到了解决这个问题的解决方案。
赞赏。 :)
解决方案如下:
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;
}