//判断整数、小数、空        public bool IsNumericOrEmpty(string s)
        {
            if (s == null || s.Length == 0)
            {
                return true;
            }
            if (System.Text.RegularExpressions.Regex.IsMatch(s, @"^([1-9]\d*|[1-9]\d*.\d*|0|0.\d*)$"))
            {
                return true;
            }
            return false;
        }
private void XieyiTwo_CheckedChanged(object sender, EventArgs e)
        {
            if(XieyiTwo.Checked)
            {
                ETBeizhu.Text += "单车直送";
                TextBox t = sender as TextBox;
                if (!IsNumericOrEmpty(t.Text))
                {
                    t.Clear();
                    t.Focus();
                    MessageBox.Show("请输入数字或留空!", "订单系统", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    //MessageBox.Show(t.Text);
                    float w1;
                    float ws;
                    float dj;
                    dj = 3.3F;                    float.TryParse(ETLicheng.Text, out w1);
                    ws = w1 * dj;
                    ETPrice.Text = ws.ToString();
                }
            }
            else
            {
                ETBeizhu.Text = "";
            }
        }
上边的代码报错:
未处理NullReferenceException
未将对象引用设置到对象的实例。
请问高手我应该怎么修改?

解决方案 »

  1.   

    是在 “if (!IsNumericOrEmpty(t.Text))”
    上报错的:
    未处理NullReferenceException 
    未将对象引用设置到对象的实例。 
      

  2.   

    从你的CheckedChanged的这个名字上看,这个事件处理函数应该不是被绑定在TextBox上的,而是绑定在类似于CheckBox这样的控件上的,于是,你的sender就肯定不可能是TextBox,而是那个CheckBox,如此一来,TextBox t = sender as TextBox;这句话就没法把sender转换成TextBox,那么t也就是为Null了。解决:
    可以将TextBox的Leave事件,或者TextChanged事件绑定到这个事件处理函数上
      

  3.   

    你可以在你出错的地方设置一个断点,然后调试到这里,看看sender到底是什么类型,我估计应该不是text box
      

  4.   

    TextBox t = sender as TextBox;
    估计是这里的t为null,可能sender就不是一个TextBox
      

  5.   

    你的
    TextBox t = sender as TextBox;
    这句代码有问题,t为空!
      

  6.   

    应该是sender as TextBox为NULL了。看你的代码就知道sender不是TEXTBOX. sender应该是名为XieyiTwo的控件。改为:
    private void XieyiTwo_CheckedChanged(object sender, EventArgs e)
            {
                if(XieyiTwo.Checked)
                {
                    ETBeizhu.Text += "单车直送";
                    TextBox t = sender as TextBox;//这里有问题,应该转不过来,所以是NULL
                    if(t!=null)
                    {
                    if (!IsNumericOrEmpty(t.Text))
                     {
                     }
           }
    }
      

  7.   

    sender as TextBox 为空!!