base.Dispose(disposing) 未处理的 system.stackoverflowexception
就是简单的手持机 扫描条码界面
首先判断该条码在这个单号里又没,没有的话就添加,然后关闭当前窗口,重新加载该窗口,
this.Name 为单号
现在的问题是扫描一会儿就出现如下错误
未处理的 system.stackoverflowexception
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
string sqlcount = "select count(*) from mb_xs_detail where sheet_no='" + this.Name + "' and item_no='" + this.textBox1.Text + "'";
SQLCEWrapper cetest = new SQLCEWrapper();
int i = int.Parse(cetest.ReObjectvalue(sqlcount).ToString());
if (textBox1.Text == "")
{
MessageBox.Show("请输入条码");
this.textBox1.Focus();
}
else if (i != 0)
{
MessageBox.Show("该条码已存在");
this.textBox1.Text = "";
this.textBox1.Focus();
}
else
{
// SQLCEWrapper cetest = new SQLCEWrapper();
string sqlgetid = "select max(SUBSTRing(id,3,5)) from mb_xs_detail";
string newid = cetest.Getid(sqlgetid);
string SQLstr = "INSERT INTO mb_xs_detail (id,sheet_no,item_no) values ('" + newid + "','" + this.Name + "','" + this.textBox1.Text + "')";
//string SQLstr = "INSERT INTO mb_xs_detail (id,sheet_no,item_no) values ('00009'" + this.Name + "','" + this.textBox1.Text + "')";
cetest.ExecuteNoResult(SQLstr);
this.Dispose();
SendDetail form1 = new SendDetail(this.Name);
form1.ShowDialog(); //模式窗口,先运行Form1的作用
}
}
}
窗口初始化的代码
this.textBox2.Text = "销售发货-" + this.Name;
this.lbczy.Text = user.UserName;
string strSql = "SELECT id as 流水号,item_no as 条码,sheet_no 单号 FROM mb_xs_detail where sheet_no='" + this.Name + "'";
string sqlcountqty = "select count(*) from mb_xs_detail where sheet_no='" + this.Name + "'";
SQLCEWrapper cetest = new SQLCEWrapper();
int j = int.Parse(cetest.ReObjectvalue(sqlcountqty).ToString());
this.lbqty.Text = j.ToString();
// 将 ResultSetView 绑定到 DataGrid 控件
this.dataGrid1.DataSource = cetest.resultSetView(strSql);
//设置DataGrid 列宽 第一步
DataGridTableStyle myDataGridStyle = null;
GridColumnStylesCollection myDataGridColStyle = null;
myDataGridStyle = new DataGridTableStyle();
dataGrid1.TableStyles.Clear(); // 先清除格式
dataGrid1.TableStyles.Add(myDataGridStyle);//加载格式
// 设置dataGrid 列的宽度
myDataGridColStyle = dataGrid1.TableStyles[0].GridColumnStyles;
myDataGridColStyle[0].Width = 55;
myDataGridColStyle[1].Width = 150;
myDataGridColStyle[2].Width = 120;
}
[解决办法]
你的逻辑很有问题,先调用this.Dispose();后再执行其它和this相关的代码,这意味着那个this.Dispose()将被压入堆栈延后响应,你操作次数越多,压入堆栈的数量就越多,自然会堆栈溢出了。
这里既然是打开自己,那就根本没有必要先关闭自己,直接更新界面上的元素即可,这样效率更高,速度更快。