未知昵称
2017-12-05 02:20
采纳率: 89.7%
浏览 3.1k

C# 代码错误,未将对象引用设置到对象的实例

private void btnSend_Click(object sender, EventArgs e)
{
if (cbTimeSend.Checked)
{
tmSend.Enabled = true;
}
else
{
tmSend.Enabled = false;
}

        if (!sp1.IsOpen) //如果没打开
        {
            MessageBox.Show("请先打开串口!", "Error");
            return;
        }
       // string strSend = null;
        String strSend = txtSend.Text.ToString();

            if (radio1.Checked == true) //“HEX发送” 按钮 
            {
                //处理数字转换
                string sendBuf = strSend;
                string sendnoNull = sendBuf.Trim();
                string sendNOComma = sendnoNull.Replace(',', ' ');    //去掉英文逗号
                string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号
                string strSendNoComma2 = sendNOComma1.Replace("0x", "");   //去掉0x
                strSendNoComma2.Replace("0X", "");   //去掉0X
                string[] strArray = strSendNoComma2.Split(' ');

                int byteBufferLength = strArray.Length;
                for (int i = 0; i < strArray.Length; i++)
                {
                    if (strArray[i] == "")
                    {
                        byteBufferLength--;
                    }
                }
                // int temp = 0;
                byte[] byteBuffer = new byte[byteBufferLength];
                int ii = 0;
                for (int i = 0; i < strArray.Length; i++)        //对获取的字符做相加运算
                {

                    Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]);

                    int decNum = 0;
                    if (strArray[i] == "")
                    {
                        //ii--;     //加上此句是错误的,下面的continue以延缓了一个ii,不与i同步
                        continue;
                    }
                    else
                    {
                        decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] == 12时,temp == 18 
                    }

                    try    //防止输错,使其只能输入一个字节的字符
                    {
                        byteBuffer[ii] = Convert.ToByte(decNum);
                    }
                    catch (System.Exception ex)
                    {
                        MessageBox.Show("字节越界,请逐个字节输入!", "Error");
                        tmSend.Enabled = false;
                        return;
                    }

                    ii++;
                }
                sp1.Write(byteBuffer, 0, byteBuffer.Length);
            }
            else        //以字符串形式发送时 
            {
                sp1.WriteLine(txtSend.Text);    //写入数据
            }

    }

void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//输出当前时间
DateTime dt = DateTime.Now;
txtReceive.Text += dt.GetDateTimeFormats('f')[0].ToString() + "\r\n";
txtReceive.SelectAll();
txtReceive.SelectionColor = Color.Blue; //改变字体的颜色
try
{
byte[] receivedData = new byte[sp1.BytesToRead]; //创建接收字节数组
sp1.Read(receivedData, 0, receivedData.Length); //读取数据
if (receivedData.Length == 0)
return;
sp1.DiscardInBuffer(); //清空SerialPort控件的Buffer
if (receivedData.Length == 3 && receivedData[0] == 0xFF && receivedData[1] == _totalBytes[1] &&
receivedData[2] == 0x00)

            {
                //_totalBytes[1] = Convert.ToByte(_totalBytes[1] == 0xB5 ? 0xB6 : 0xB5);
                _totalBytes[1] = Convert.ToByte(_totalBytes[1] == 0xB6 ? 0xB5 : 0xB6);
                //_size += _totalBytes[1] == 0xB5 ? 512 : 0;
                _size += _totalBytes[1] == 0xB6 ? 512 : 0;
                SendBytes(false);
            }
            else
            {
                //发送失败
            }
            string strRcv = null;
            if (rdSendStr.Checked)
            {
                strRcv = sp1.Encoding.GetString(receivedData);
            }
            else
            {
                //int decNum = 0;//存储十进制
                for (int i = 0; i < receivedData.Length; i++) //窗体显示
                {

                    strRcv += receivedData[i].ToString("X2");  //16进制显示
                }
            }
            txtReceive.Text += strRcv + "\r\n";
        }
        catch (System.Exception ex)
        {
            MessageBox.Show(ex.Message, "出错提示");
            txtSend.Text = "";
        }
    }
 串口发送一段指定的字符串,串口接收,串口收到回复消息,提示出错。未将对象引用设置到对象的实例

图片说明





  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

17条回答 默认 最新

  • nulinihao 2017-12-05 02:23
    已采纳

    判断条件改为:
    if(treeView1.SelectedNode==null || treeView1.SelectedNode.Tag ==null)
    {

    //……
    }
    原因:
    SelectedNode 有可能为空值

    点赞 打赏 评论
  • qq_19245589 2017-12-05 02:23

    出这个问题的原因是你有对象没有赋值就去引用里面的方法或者对象了啊

    点赞 打赏 评论
  • cjw905451428 2017-12-05 02:27

    你打个断点跑程序很容易就发现了,进去看

    点赞 打赏 评论
  • das白 2017-12-05 02:30

    别用try catch 看看到底哪里出问题了

    点赞 打赏 评论
  • qq_41278774 2017-12-05 02:31

    串口发送一段指定的字符串,串口接收,串口收到回复消息,提示出错。未将对象引用设置到对象的实例

    点赞 打赏 评论
  • nutterxm 2017-12-05 02:34

    判断条件改为:
    if(treeView1.SelectedNode==null || treeView1.SelectedNode.Tag ==null)
    {

    //……
    }
    原因:
    SelectedNode 有可能为空值

    点赞 打赏 评论
  • sehun521 2017-12-05 02:39

    你去打个断点,进行调适,进入调适模式看一下哪里出错了

    点赞 打赏 评论
  • qq_41181511 2017-12-05 02:42

    判断条件改为:
    if(treeView1.SelectedNode==null || treeView1.SelectedNode.Tag ==null)
    {

    //……
    }
    原因:
    SelectedNode 有可能为空值

    点赞 打赏 评论
  • weixin_41279347 2017-12-05 02:57

    SelectedNode 有可能为空值

    点赞 打赏 评论
  • 菜鸟_1号 2017-12-05 03:27

    判断条件改为:
    if(treeView1.SelectedNode==null || treeView1.SelectedNode.Tag ==null)
    {

    //……
    }
    原因:
    SelectedNode 有可能为空值

    点赞 打赏 评论
  • D_Sulin 2017-12-05 03:31

    判断条件改为:
    if(treeView1.SelectedNode==null || treeView1.SelectedNode.Tag ==null)
    {

    //……
    }
    原因:
    SelectedNode 有可能为空值

    点赞 打赏 评论
  • Jenny_aalizzwell 2017-12-05 03:51

    SelectedNode 有可能为空值

    点赞 打赏 评论
  • weixin_38203750 2017-12-05 07:31

    检查一下配置串口或者SelectedNode 有可能为空值

    点赞 打赏 评论
  • celiali1982 2017-12-06 03:37

    判断条件改为:
    if(treeView1.SelectedNode==null || treeView1.SelectedNode.Tag ==null)
    {

    //……
    }
    原因:
    SelectedNode 有可能为空值

    点赞 打赏 评论
  • taozangcheng7711 2017-12-06 05:21

    SelectedNode 有可能为空值
    加断点慢慢调试看看哪里有问题

    点赞 打赏 评论
  • DreamLongs 2017-12-07 02:36

    打个断点一步步的调试,直到报错的哪一行,想想为什么为空

    点赞 打赏 评论
  • qq_39639084 2017-12-07 08:03

    判断条件改为:
    if(treeView1.SelectedNode==null || treeView1.SelectedNode.Tag ==null)
    {

    //……
    }
    原因:
    SelectedNode 有可能为空值

    点赞 打赏 评论

相关推荐