C#关闭子窗体,返回主窗体时出错

先运行的主窗体,打开子窗体,然后在子窗体里this.Close();然后子窗体虽然关闭了,但是出现了异常错误,提示应用程序发生了未经处理的异常,路径名不能为null,参数名:path
在主窗体(Form1)中声明public string r=null;然后弹出子窗体
在子窗体中public Form1 F=new Form1();
r=" asdadsasfaaf等等";
this.Close();
然后主窗体中r还是null,为什么啊?

你的逻辑不正确:
1 、你在子窗体里不需要的再public Form1 F=new Form1();来创建新的窗体。
2、你在子窗体对r赋值了,你这个r在这些代码看是属于子窗体的而不是主窗体的公共变量r。
3、r的值没有传递给主窗体
正写法(可参考);
(1)使用静态变量 :在主窗体将r声明为静态的
如 public static string path=null;
在子窗体里对主窗体的path赋值
Form1.path="D\\test.txt";

这个就可以关闭子窗体了 this.close();
(2)使用主窗体传参
主窗体声明变量 public string path=null;
在变子窗体里声明 主窗体变量 Form1 form1=null;
在子窗体 的构造方法里写
public Form2(Form1 form1)
{
this.form1=form1;
}
在子窗体中对主窗体的path进行赋值
form1.path="D:\\.....";
this.close

(3)使用委托
在子窗体声明委托及其变量
public delegate void SetPathEventHandler(string pathName);
public SetPathEventHandler setPath;
在子窗体里调用委托
setPath("D:\\fdsafasfas\\....")
this.close
主窗体声明变量 public string path=null;
在主窗体里声明委托实现方法
private void getPath(string pathName)
{
//对path赋值
path=pathName;
}
在主窗体创建子窗体时
Form2 f2=new Form2();
f2.setPath=new SetPathEventHandler(getPath);
f2.show();
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-09-04
子窗体里有处理程序没有完成,或是Closeing事件里出了问题
加入Form2是子窗体
Form2的构造函数,要先定义一个From1 frm1;
Form2(From1 frm1)
{
this.frm1=frm1;
}
实例化Form2时,将Form1传进去,然后调用Form1.r本回答被网友采纳
第2个回答  2014-09-04
你用 F.r=" asdadsasfaaf等等"; 试试追问

就是这么写的,在关闭子窗体之前验证一下确实已经赋值了,一关闭回到主窗体就变null

追答

这个就是变量的生命周期 只在调用时 有效 调用结束 就无效了

第3个回答  2014-09-03
代码发上来追问

发不上来,和互联网不能通的

追答

那没办法了

追问

在主窗体(Form1)中声明public string r=null;然后弹出子窗体
在子窗体中public Form1 F=new Form1();
r=" asdadsasfaaf等等";
this.Close();
然后主窗体中r还是null,为什么啊?

追答

你又没传值,肯定是null啊

追问

我在子窗体里面传值了,

追答

亲,用构造传值
Form1的构造
private string r;
public Form1(string r1)

this.r = r1;


在子窗体中
Form1 F=new Form1(“asdasdadfas”);

C#关闭子窗体,返回主窗体时出错
(1)使用静态变量 :在主窗体将r声明为静态的 如 public static string path=null;在子窗体里对主窗体的path赋值 Form1.path="D\\\\test.txt";这个就可以关闭子窗体了 this.close();(2)使用主窗体传参 主窗体声明变量 public string path=null;在变子窗体里声明 主窗体变量 Form1 form1=n...

c#主窗体按钮关闭子窗体时跳出异常,说子窗体中的txt文件被另一进程应用...
你要在退出子窗体前将正在使用的文件关闭。file.close(),否则会有这个异常

C#窗体关闭时出现错误
因为你没有处理,点击取消时没有处理事件 result = MessageBox.Show("确认退出?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);if (result == DialogResult.OK){ Application.ExitThread();} else { e.Cancel = true;}

C#中,点击窗体的右上角的红叉关闭窗体了,再次打开提示未释放的原因...
之前的错误是因为窗体关闭后,对象虽然还在,但是窗体资源已经被释放了,再次show的时候就会抛出异常。也可以这样解决:响应FrmEditAdmin的Close事件,不要真正关闭窗口(好像是e.Cancel=true),而是调用hide隐藏(this.Hide())。

c#怎么关闭子窗体时刷新主窗体,要代码
你把所有绑定主窗口数据的代码全部写在一个方法里面,叫LoadDate()然后在在子窗体的showDialog()后面(var dlg=form.ShowDialog();)写上 if(dlg==DialogResult.OK)LoadDate();就像这样:

C#子窗口关闭时怎样立刻刷新主窗口
2。如果使用的是直接创建的窗体,并且是关联窗体(使用了Owner),可以在关闭子窗体前加入 TextBox tb = (TextBox)OwnerForm.Controls["textBox1"]; \/\/ 从Owner窗体获得控件 tb.Text = textBox1.Text; \/\/ 更新Owner窗体空间属性值 3。如果使用的是直接创建的窗体,并且没有该窗体与创建它的窗...

c#中关闭子窗口怎样刷新主窗口 关闭子窗体然后刷新主窗体中的datagradevie...
你可以给子窗口关闭是给一个返回值,父窗口判断返回值 父窗口代码 Form2 f = new Form2();if (f.ShowDialog() == DialogResult.OK){ \/\/刷新 } 子窗口代码 private void Form2_FormClosing(object sender, FormClosingEventArgs e){ this.DialogResult = DialogResult.OK;} ...

C#Winform 怎么实现隐藏主窗体,关闭子窗体后又回到主窗体?
m1为主窗体 m2为子窗体 在m1中.this.visible=false;\/\/在m2中定义一个变量,用于记忆主窗体;public Form ParentForm; \/\/用公共变量或者属性都可以 \/\/把当前窗体送给子窗体记忆;m2.ParentForm=this;m2.Show();\/\/在m2关闭时;this.ParentForm.Visible=true;...

C#中关闭窗口出现错误
在窗体内部调用close没错 怕的是 调用之后 在主程序中有下面这样的句子 Application.Run(new Form1());会提示说不能访问已经释放的资源而出错

C#的WinForm程序子窗口关闭后仍存在进程问题.
窗体全是主线程创建的,仍存在应该是你资源没有释放干净。如子窗体中海油线程在跑等等。

相似回答
大家正在搜