C# 关于委托与事件的应用错误

问题描述

使用委托事件的时候,报“未将对象引用到实列”usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingMyDZCZ.cls;usingMyDZCZ.UI.CarManager;usingSystem.Threading;namespaceMyDZCZ.baseInfor{publicdelegatevoidPassStrHandel(stringstr);publicpartialclassProductsGoodsFrm:DevExpress.XtraEditors.XtraForm{publiceventPassStrHandelpssStr;privateboolIsMouseDown=false;privatePointmouseOffset;publicProductsGoodsFrm(){InitializeComponent();}DataSetds;stringstrSql;privatevoidProductsGoodsFrm_Load(objectsender,EventArgse){ShowData();}///<summary>///加载数据///</summary>publicvoidShowData(){clsBase.dbHelper=newdbHelp(clsBase.ConnectiongString());strSql="select*fromtblProds";if(clsBase.dbHelper.ConnDB()){using(ds=clsBase.dbHelper.ExcuteSelect(strSql,"tblProds")){for(inti=0;i<ds.Tables[0].Rows.Count;i++){DataRowdr=ds.Tables[0].Rows[i];intindex=this.dataGridView1.Rows.Add();this.dataGridView1.Rows[index].Cells[0].Value=dr[1].ToString();this.dataGridView1.Rows[index].Cells[1].Value=dr[2].ToString();this.dataGridView1.Rows[index].Cells[2].Value=dr[3].ToString();this.dataGridView1.Rows[index].Cells[3].Value=dr[4].ToString();}}}}privatevoidbtn_Esc_Click(objectsender,EventArgse){this.Close();}privatevoidsplitContainer1_Panel1_MouseDown(objectsender,MouseEventArgse){if(e.Button==MouseButtons.Left){IsMouseDown=true;}mouseOffset=newPoint(-e.X,-e.Y);}privatevoidsplitContainer1_Panel1_MouseMove(objectsender,MouseEventArgse){if(IsMouseDown==true){PointmousePos=Control.MousePosition;mousePos.Offset(mouseOffset.X,mouseOffset.Y);this.Location=mousePos;}}privatevoidsplitContainer1_Panel1_MouseUp(objectsender,MouseEventArgse){IsMouseDown=false;}privatevoidbtn_Sure_Click(objectsender,EventArgse){if(this.txt_Products.Text.Trim()!=""&&this.txt_Products.Text.Trim()!=null){if(pssStr!=null)pssStr(txt_Products.Text.Trim());//这个地方报错空异常??请问这里为什么会是null???????????this.txt_Products.Text="";}}privatevoiddataGridView1_DoubleClick(objectsender,EventArgse){this.txt_Products.Text=this.dataGridView1.CurrentRow.Cells[0].Value.ToString();//pssStr(this.dataGridView1.CurrentRow.Cells[0].Value.ToString());}}}````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````父窗体usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingMyDZCZ.baseInfor;namespaceMyDZCZ.UI.CarManager{publicpartialclassEditeFrm:Form{publicEditeFrm(){InitializeComponent();Control.CheckForIllegalCrossThreadCalls=false;}#region属性privatestringcarNum;///<summary>///车号///</summary>publicstringCarNum{get{returncarNum;}set{carNum=value;}}privatestringdriveName;///<summary>///司机姓名///</summary>publicstringDriveName{get{returndriveName;}set{driveName=value;}}privatestringproductsName;///<summary>///货物///</summary>publicstringProductsName{get{returnproductsName;}set{productsName=value;}}privatestringproductSize;///<summary>///货物规格///</summary>publicstringProductSize{get{returnproductSize;}set{productSize=value;}}privatestringsupplyUnit;///<summary>///供货单位///</summary>publicstringSupplyUnit{get{returnsupplyUnit;}set{supplyUnit=value;}}privatestringreciveUnit;///<summary>///收货单位///</summary>publicstringReciveUnit{get{returnreciveUnit;}set{reciveUnit=value;}}privatestringtrafficUnit;///<summary>///运输单位///</summary>publicstringTrafficUnit{get{returntrafficUnit;}set{trafficUnit=value;}}#endregionProductsGoodsFrmPF;privatevoidEditeFrm_Load(objectsender,EventArgse){Cf=newchooseCarNumFrm();Cf.PassString+=newPassStringHander(Cf_PassString);PF=newProductsGoodsFrm();PF.pssStr+=newPassStrHandel(PF_pssStr);this.txt_CarNo.Text=this.CarNum;this.txt_Drive.Text=this.DriveName;this.txt_Size.Text=this.ProductSize;this.userControl11.TxtBox=this.ProductsName;this.userControl12.TxtBox=this.SupplyUnit;this.userControl13.TxtBox=this.ReciveUnit;this.userControl14.TxtBox=this.TrafficUnit;this.userControl11.pastr+=newMyDZCZ.Controls.PssstrHandel(userControl11_pastr);this.userControl12.pastr+=newMyDZCZ.Controls.PssstrHandel(userControl12_pastr);this.userControl13.pastr+=newMyDZCZ.Controls.PssstrHandel(userControl13_pastr);this.userControl14.pastr+=newMyDZCZ.Controls.PssstrHandel(userControl14_pastr);}///<summary>///委托过来的执行事件///</summary>///<paramname="str"></param>voidPF_pssStr(stringstr){if(str!="")this.userControl11.TxtBox=str;}#region事件voiduserControl14_pastr(){}voiduserControl13_pastr(){}voiduserControl12_pastr(){}voiduserControl11_pastr(){ProductsGoodsFrmpf=newProductsGoodsFrm();Pointpostion=System.Windows.Forms.Cursor.Position;pf.Left=postion.X;pf.Top=postion.Y;if(pf.ShowDialog()==System.Windows.Forms.DialogResult.OK){return;}}#endregionvoidCf_PassString(stringstr){if(str!="")this.txt_CarNo.Text=str;}chooseCarNumFrmCf;privatevoidbtn_SelectCarNo_Click(objectsender,EventArgse){Pointpostion=System.Windows.Forms.Cursor.Position;Cf.Left=postion.X;Cf.Top=postion.Y;Cf.ShowDialog();}}}

解决方案

解决方案二:
不看了,错误提示告诉你了,访问量空对象,看哪行出错,保证使用前已经创建对象
解决方案三:
http://bbs.csdn.net/topics/360140208
解决方案四:
未将对象引用到实列只要出现了这个,保证是某个变量为null,你却要访问它的属性
解决方案五:
pssStr(txt_Products.Text.Trim())这是啥用法你把event当function来用吗
解决方案六:
该new的地方没new
解决方案七:
太长了,看着累。你设置断点调试,看看哪个对象没实例化。
解决方案八:
是挺奇怪的if(this.txt_Products.Text.Trim()!=""&&this.txt_Products.Text.Trim()!=null){if(pssStr!=null)pssStr(txt_Products.Text.Trim());//代码能执行到这里,说明txt_Products.Text.Trim()不是空,事件pssStr也绑定了this.txt_Products.Text="";}

解决方案九:
另外,发现一个问题,你在父窗体里new了ProductsGoodsFrm,也注册了事件,唯独没有show子窗体PF=newProductsGoodsFrm();PF.pssStr+=newPassStrHandel(PF_pssStr);//...PF.Show();//在代码段的最后加上这句

解决方案十:
PF=newProductsGoodsFrm();PF.pssStr+=newPassStrHandel(PF_pssStr);//...PF.Show();//在代码段的最后加上这句我没必要SHOW啊,我只是在子窗体点击Button按钮的时候传递一个string字符串给父窗体啊,但是事件却为null是怎么回事?
解决方案十一:
既然你能断点调试,不要告诉我这个地方报空异常到底什么变量是空??
解决方案十二:
太长了,看着累。

时间: 2024-10-21 19:05:31

C# 关于委托与事件的应用错误的相关文章

从使用层面上了解委托和事件的区别

从本篇文章中,我们将从代码层面知道委托和事件的差异和用处,并且我们不会用猫和老鼠之类奇怪的比喻来混淆大家. 首先,我们知道委托和事件都可以用来调用跟自己方法签名一样的方法.容易混淆大家的地方大多在于这两者之间的区别.从我们使用委托delegate和事件event上的主要有两大区别(如表1所示).                           表1 委托和事件的区别 序号 区别 委托 事件 1 是否可以使用=来赋值 是 否 2 是否可以在类外部进行调用 是 否 3 是否是一个类型 是 否,事

[C#]委托和事件(详细讲解)

引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在.本文中,我将通过两个范例由浅入深地讲述什么是委托.为什么要使用委托.事件的由来..Net Framework中的委托和事件.委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论. 将方法作为方法的参数 我们先不管这个标题

解惑答疑:C#委托和事件

相信很多人一直为C#委托和事件所困惑,尤其是C#的初学者,学到这一部分会感觉比较困难,很有可能就放弃了,而且.NET对委托和事件封装得挺好,一般都不怎么用到自定义的委托和事件,所以放弃学习该技术就有了借口! 网上也有不少此类的文章,最具代表性的是张子阳的C#中的委托和事件这篇,写得的确很好,得到很多读者的赞赏,但我看评论,还是发现了些问题,因为有不少读者是看了一遍又一遍,每次感觉都蛮好,可是隔一段时间,对"委托和事件"又迷糊了,于是又来看!我真搞不懂,为什么会出现这种情况!后来想想,文

艾伟_转载:解惑答疑:C#委托和事件

相信很多人一直为C#委托和事件所困惑,尤其是C#的初学者,学到这一部分会感觉比较困难,很有可能就放弃了,而且.NET对委托和事件封装得挺好,一般都不怎么用到自定义的委托和事件,所以放弃学习该技术就有了借口! 网上也有不少此类的文章,最具代表性的是张子阳的C#中的委托和事件这篇,写得的确很好,得到很多读者的赞赏,但我 看评论,还是发现了些问题,因为有不少读者是看了一遍又一遍,每次感觉都蛮好,可是隔一段时间,对"委托和事件"又迷糊了,于是又来看!我真搞不懂,为什 么会出现这种情况!后来想想

从反射看委托与事件 委托真的是一个类

关于委托与事件,网上介绍得非常之多,在此不再赘述,本人最近需要捣鼓一些委托,因而对委托进行一 定的寻根究底,故用反射把委托的成员揪出来,且看如下代码: delegate void DelegateDemo(); static event DelegateDemo delHandle; static void Main() { delHandle += new DelegateDemo(MyDelegate_delHandle); MemberInfo[] mis = delHandle.GetT

C#委托和事件

委托和事件 .NET Framework 还可以广泛地将委托用于事件处理任务,如 Windows 或 Web 应用程序中的按钮 Click 事件.Java 中的事件处理通常通过实现自定义侦听器类完成,而 C# 开发人员则可以利用委托处理事件.事件的声明类似于具有委托类型的字段,区别在于事件声明前面有 event 关键字.事件通常被声明为 public,但允许使用任何可访问性修饰符.下面的示例演示了 delegate 和 event 的声明. C#  =复制代码 // Declare the de

你可能不知道的陷阱:C#委托和事件的困惑

一. 问题引入          通常,一个C语言学习者登堂入室的标志就是学会使用了指针,而成为高手的标志又是"玩转指针".指针是如此奇妙,通过一个地址,可以指向一个数,结构体,对象,甚至函数.最后的一种函数,我们称之为"函数指针"(和"指针函数"可不一样!)就像如下的代码: int func(int x); /* 声明一个函数 */ int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋

C#中委托,事件理解入门

目录 l        导论 l        什么是委托 l        事件的理解 l        事件 关键字 l        最后     导论     在学习C#中的委托和事件过程中,我读了许多文章来理解他们二者究竟是怎么一回事,以及如何使用他们,现在我将整个的理解过程陈述以下,我学到的每一方面,恐怕也是你们需要掌握的 :-). 什么是委托?     委托和事件这两个概念是完全配合的.委托仅仅是函数指针,那就是说,它能够引用函数,通过传递地址的机制完成.委托是一个类,当你对它实例

C#编程利器之四:委托与事件(Delegate and event) (上)

本文试图在.net Framework环境下,使用C#语言来描述委托.事件的概貌.希望本文能有助于大家理 解委托.事件的概念,理解委托.事件的用途,理解它的C#实现方法,理解委托与事件为我们带来的好处 .C#是一种新的语言,希望大家能通过本文清楚地看到这些,从而可以对委托.事件等技术进行更深入的 理解和探索. 一. 委托 委托的本质 --在C#中,委托是一个特殊的类: --在某种程度上,相当于C++的函数指针: --在某种程度上,相当于接口(Interface): 委托的定义 --关键字:del