如何清除消息框后的文本框



我正在使用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;
   }

最新更新