我是菜鸟,请高手帮忙!
最近我在用C#写Symbol的MC1000中的一个程序,只有两个界面(一个主界面,一个被调用界面),我想实现一个扫描条码并显示在textBox中的小东东,但是我的第一次调用没问题,第二次调用时界面的textBox中什么也没有,但我用   MessageBox.Show(textBox.Text);却有我要的内容,实在是找不原因,请大虾帮忙!!在线等!
谢谢了!

解决方案 »

  1.   

    重新设置txetbox的值没有?上一次绑定有没有解除或清空?有没有设置txetbox其它属性?
      
    *****************************************************************************
    我行之我素
      

  2.   

    if(TheReaderData.Text.Length==12)  //TheReaderData.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+"找到对应型号!");
    }
      

  3.   

    barcode.Text=TheReaderData.Text; 到这里时值对么?
      

  4.   

    哦,那就奇怪了。也就是说Text中的值已经是对的了,但是在窗体上显示却不对。你说的打开主窗体,关闭后再调用什么意思?主窗体关闭了,不就是重新运行程序了么?
      

  5.   

    1。我现在打开主窗体1(里面只有一个标签“1。信息管理”)
    然后我按 1 后进入了下级窗体(就是上面代码的窗体:第一次调用 ).
    2。操作(正常),按ESC关闭该窗体,回到主界面(主窗体没关闭。再按 1 进入刚才的窗体,然后操作不出问题,就是窗体上(textBox赋值是成功的)没有显示出信息来。
    3。然后我关闭整个应用程序后再来,就重复1的步骤了
      

  6.   

    你调用窗口的代码贴出来看看.还有,if(TheReaderData.Text.Length==12)  不等12的时候有没有做处理.
      

  7.   

    webform?按ESC关闭该窗体,关闭了还是hide了?没道理啊~!!
      

  8.   

    this.Close();
    就是用的这个结束的。
      

  9.   

    case 49:   //1
    e.Handled = true;
    TXT.isSetType=true;
    Query dlg = new Query();
    dlg.m_frmParent = this;
    dlg.ShowDialog();
    break;
    这个就是主窗体是调用了窗体的代码,应该没错的、
      

  10.   

    你下面这代码是在 Query 中的?
    if(TheReaderData.Text.Length==12)也就是说是在本窗体中设置自己的TextBox,值设置上了,却发现TextBox显示不出来?没道理~~  呵呵
      

  11.   

    是的,if(TheReaderData.Text.Length==12)是用来检测扫描的数据是否符全要求(12位的条码)。
    符合了才能往下进行啦
      

  12.   

    那就是不符合吧。
    你确定第二次设置了TextBox??????总觉得不可能啊。太奇怪了
      

  13.   

    肯定是设置了textBox的,我刚开始还怕没赋上值
    然后就用MessageBox.Show(TextBox.Text);验证了一下,值确实是赋上了。不知道这到底是哪里出错了,我刚才又试了下,二次调用了窗体时,用键盘输入的值也可以显示,就是扫描进来的值不能显示。
      

  14.   

    Query 内容多么?
    不多贴出来,研究研究。
      

  15.   

    太大了,上不了,现在得走了,谢谢 wdy9927 你的帮助,我明天再上
      

  16.   


    /*这个函数就是用来读取扫描进的数据并进行操作的***/
    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;
    }
    }
      

  17.   

    窗体上加个按钮,MessageBox.Show(barcode.Text);当出现Text为空的时候就把当前的Text显示出来。总觉得不应该出现Text有值,而显示不出来这样的情况。
      

  18.   

    barcode是有值的,就是显示不出来,是不是要刷新一下,或是什么的!
      

  19.   

    可以用另外的方式测试一下,比如:把barcode赋值给 this.Text.测试一下有没有问题.
    或者把 barcode.Text=TheReaderData.Text; 提到判断条件之前执行看看.
      

  20.   

    if ( TheReaderData.Result == Symbol.Results.SUCCESS )
    {
    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()试了下,同样的代码,用键盘输入的话,就没什么问题,但是一到扫描上来就不行了。
    郁闷!!!!!!
      

  21.   

    public static void StartRead()
    {
    // 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();才出错的,但是不太明白为什么!!!
    解决就好了,谢谢你的帮忙啊!!