如题,
程序有两个窗体,form2的button删除本窗体并在form1的listview控件中删除一行。
frm.tip是本form2的列数号码。
在执行的时候        frm.listView1.Items.RemoveAt(frm.tip);中断了
弹出异常:
         未处理的“System.NullReferenceException”类型的异常出现在 Notes.exe 中。         其他信息: 未将对象引用设置到对象的实例。form1 frm
private void buttion1_click(object sender, EventArgs e)
{
    if (MessageBox.Show("是否要删除标签\n删除标签后将不能恢复", "删除提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) != DialogResult.OK) ;
    else
    {
        frm.listView1.Items.RemoveAt(frm.tip);
        this.Dispose();
     }
}

解决方案 »

  1.   

    frm
    你没有获得form1的实例吧
      

  2.   

    中断后frm的值是null你说要怎么初始化呢?
    frm=null的话就不能执行了
    frm=new form1的话就是新建一个窗体了。
      

  3.   


    form2窗体在创建的时候,把它的构造函数给改了:
    public Form2 ( Form1 frm1 )
    {
        this.frm = frm1;
    }
    这样就可以了……
      

  4.   

    可以说清楚一点么?
    具体怎么构造阿?我两个窗体是不一样的喔
    是不是在
            public main()
            {
                InitializeComponent();
            }
    里面改阿?
      

  5.   


    这里没有 main() 的事儿吧。main()是定义在 application 类里面的吧,是一个 static 函数。C#的WINFORM编程可和C++不一样呵。你创建一个新 form2 类的时候,不是有构造函数么?构造函数……你知道吧……
      

  6.   


    不好意思,我之前的窗体名称叫main,所以我搞错了。
    但是构造函数后,frm1这个参数是什么意思阿?
    public Form2(Form1 frm1)
            {
                this.frm = frm1;
            }构造Form2的函数干什么呢?
    我要建的是Form1阿~我要调用的是Form1里面的东西。
    我构造了Form1的函数
    但是在form2里面Form frm = new Form1(frm);貌似没有效果喔~
    我是初学的~不太懂~
      

  7.   

    看你是谁先谁后了,我以为你是FORM2在后,由FORM1来调用,故而如是写法。如果你是FORM2在前,FORM1在后的话,那不就更简单了?那你的FORM1就是由FORM2来创建的,你FORM2本来就拥有了FORM1的引用了,直接调用不就完了?C#的WINFORM可是单线程的,两个窗体,必然一先一后。楼主你是哪种?我两种都说了。
      

  8.   

    我在网上找到了更详细的方法了
    http://hi.baidu.com/zhaoxintj/blog/item/30de1d22792915fbd7cae2d8.htm不过还是谢谢你们了