我是菜鸟,请高手帮忙!
最近我在用C#写Symbol的MC1000中的一个程序,只有两个界面(一个主界面,一个被调用界面),我想实现一个扫描条码并显示在textBox中的小东东,但是我的第一次调用没问题,第二次调用时界面的textBox中什么也没有,但我用 MessageBox.Show(textBox.Text);却有我要的内容,实在是找不原因,请大虾帮忙!!在线等!
谢谢了!
最近我在用C#写Symbol的MC1000中的一个程序,只有两个界面(一个主界面,一个被调用界面),我想实现一个扫描条码并显示在textBox中的小东东,但是我的第一次调用没问题,第二次调用时界面的textBox中什么也没有,但我用 MessageBox.Show(textBox.Text);却有我要的内容,实在是找不原因,请大虾帮忙!!在线等!
谢谢了!
*****************************************************************************
我行之我素
{
barcode.Text=TheReaderData.Text; //barcode(TEXTBOX)是用来写入信息的,第一次调用可以显示扫描的信息,但是第二次就显示空白*/
MessageBox.Show("条码长度正确!<"+barcode.Text+">", "提示");/*每次都产生正确的信息*/
string str=barcode.Text.Substring(0,3);//取信息的头三个字符
MessageBox.Show("str:"+str);
if(TXT.isSetType==true)
{
TXT.NSKSN=str;
int ret=TXT.findnsk();//查询读入的三个字符是不是在文件中存在
if(ret==1)
{
MessageBox.Show("未找到对应型号!");
Scan.StartRead();
}
else
{
/*****就是下的的代码,打开主窗体,调用本程序的第一次可以,但是关闭以后再调用就不能显示了,但是我用MessageBox是可以显示信息的*/NSKCode.Focus();
NSKCode.Text=TXT.NSKSN;
typeInfo.Focus();
typeInfo.Text=TXT.NSKINFO;
TXT.isSetType=false;
Text="查询NSK信息";
barcode.SelectAll();
barcode.Focus();
MessageBox.Show(this.NSKCode.Text+"找到对应型号!");
}
然后我按 1 后进入了下级窗体(就是上面代码的窗体:第一次调用 ).
2。操作(正常),按ESC关闭该窗体,回到主界面(主窗体没关闭。再按 1 进入刚才的窗体,然后操作不出问题,就是窗体上(textBox赋值是成功的)没有显示出信息来。
3。然后我关闭整个应用程序后再来,就重复1的步骤了
就是用的这个结束的。
e.Handled = true;
TXT.isSetType=true;
Query dlg = new Query();
dlg.m_frmParent = this;
dlg.ShowDialog();
break;
这个就是主窗体是调用了窗体的代码,应该没错的、
if(TheReaderData.Text.Length==12)也就是说是在本窗体中设置自己的TextBox,值设置上了,却发现TextBox显示不出来?没道理~~ 呵呵
符合了才能往下进行啦
你确定第二次设置了TextBox??????总觉得不可能啊。太奇怪了
然后就用MessageBox.Show(TextBox.Text);验证了一下,值确实是赋上了。不知道这到底是哪里出错了,我刚才又试了下,二次调用了窗体时,用键盘输入的值也可以显示,就是扫描进来的值不能显示。
不多贴出来,研究研究。
/*这个函数就是用来读取扫描进的数据并进行操作的***/
private void Reader_ReadNotify(object sender, EventArgs e)
{
Symbol.Barcode.ReaderData TheReaderData = Scan.MyReaderData;
if ( TheReaderData.Result == Symbol.Results.SUCCESS )
{
this.barcode.Text=TheReaderData.Text;
//if(TheReaderData.Text.Length==12)
if(barcode.Text.Length==12)
{
//barcode.Text=TheReaderData.Text;
MessageBox.Show("barcode.text:"+barcode.Text);
MessageBox.Show("条码长度正确!<"+barcode.Text+">", "提示");
string str=barcode.Text.Substring(0,3);
MessageBox.Show("str:"+str);
if(TXT.isSetType==true)
{
TXT.NSKSN=str;
int ret=TXT.findnsk();
if(ret==1)
{
MessageBox.Show("未找到对应型号!");
Scan.StartRead();
}
else
{
NSKCode.Focus();
NSKCode.Text=TXT.NSKSN;
typeInfo.Focus();
typeInfo.Text=TXT.NSKINFO;
TXT.isSetType=false;
this.Text="查询NSK信息";
barcode.SelectAll();
barcode.Focus();
MessageBox.Show(this.NSKCode.Text+"找到对应型号!");
this.Refresh();
}
}
else
{
if(TXT.NSKSN==""||TXT.NSKINFO=="")
{
MessageBox.Show("请设置条码型号关系!");
this.Close();
}
else
{
//if(str.Equals(TXT.NSKSN))
if(str.Equals(this.NSKCode.Text))
{
MessageBox.Show(TXT.NSKSN+"型号正确!");
NSKCode.SelectAll();
}
else
{
MessageBox.Show(TXT.NSKSN+"型号错误!");
NSKCode.SelectAll();
}
}
}
}
else
{
MessageBox.Show("条码长度不正确!","提示");
Scan.StartRead();
}
}
barcode.Focus();
}
/*下面的是对键盘输入进行操作的,中间的部分代码是相同的***/
private void Query_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
int key = (int)(e.KeyChar) ;
switch(key)
{
case 27://esc
e.Handled = true;
this.Close();
return;
case 13://ENT
e.Handled=true;/*这部分代码是昨天才加的,是从上面的函数中直接拷的,只是稍稍改点东东****/
if(this.barcode.Text.Length==12)
{MessageBox.Show("条码长度正确!<"+barcode.Text+">", "提示");
string str=barcode.Text.Substring(0,3);
if(TXT.isSetType==true)
{
TXT.NSKSN=str;
int ret=TXT.findnsk();
if(ret==1)
{
MessageBox.Show("未找到对应型号!");
Scan.StartRead();
}
else
{
NSKCode.Focus();
NSKCode.Text=TXT.NSKSN;
typeInfo.Focus();
typeInfo.Text=TXT.NSKINFO;
TXT.isSetType=false;
Text="查询NSK信息";
barcode.SelectAll();
barcode.Focus();
MessageBox.Show(this.NSKCode.Text+"找到对应型号!");
}
}
else
{
if(TXT.NSKSN==""||TXT.NSKINFO=="")
{
MessageBox.Show("请设置条码型号关系!");
this.Close();
}
else
{
//if(str.Equals(TXT.NSKSN))
if(str.Equals(this.NSKCode.Text))
{
MessageBox.Show(TXT.NSKSN+"型号正确!");
}
else
{
MessageBox.Show(TXT.NSKSN+"型号错误!");
}
}
}
}
else
{
MessageBox.Show("条码长度不正确<"+barcode.Text+">","提示");
}
//this.barcode.Text ="";
this.barcode.SelectAll();
this.barcode.Focus();
break;
}
}
或者把 barcode.Text=TheReaderData.Text; 提到判断条件之前执行看看.
{
this.barcode.Text="";
this.barcode.Text=TheReaderData.Text;
//if(TheReaderData.Text.Length==12)
if(barcode.Text.Length==12)
{
//barcode.Text=TheReaderData.Text;
MessageBox.Show("barcode.text:"+barcode.Text);我就是这样试的,值正常,但就是显示不出来 ,我后来用Query_Keypress()试了下,同样的代码,用键盘输入的话,就没什么问题,但是一到扫描上来就不行了。
郁闷!!!!!!
{
// If we have both a reader and a reader data
if ( ( Scan._MyReader != null ) &&
( Scan._MyReaderData != null ) )
{
// Submit a read
Scan._MyReader.ReadNotify += Scan._MyEventHandler; // Prevent duplicate reads
if ( !Scan._MyReaderData.IsPending )
Scan._MyReader.Actions.Read(Scan._MyReaderData);
}
} /// <summary>
/// Stop all reads on the reader
/// </summary>
public static void StopRead()
{
// If we have a reader
if ( Scan._MyReader != null )
{
// Flush (Cancel all pending reads)
Scan._MyReader.ReadNotify -= Scan._MyEventHandler;
Scan._MyReader.Actions.Flush();
}
}
}上面两个是控制扫描设备Scan类中的两个方法,每次读数据都要StartRead();当然了,不用时就要关闭该扫描设备StopRead();我就是没有调用stopRead();才出错的,但是不太明白为什么!!!
解决就好了,谢谢你的帮忙啊!!