关于使用C#进行窗口编程时,有两处不懂的地方想请教大神
c#吧
全部回复
仅看楼主
level 4
yydgys2007 楼主
最近在做小工具的编程,发现了2处问题不知道如何处理,请大佬们指点一下:
首先,我的大概流程是这样,我有2个窗口,Form1和Form2,启动后先弹出Form1,在窗口中输入值后想存到全局变量中,以供Form2使用,现在我在Form1里定义了public static静参,但是发现在Form2中写赋值时,会提示上下文找不到;
还是这个流程,我Form1里有一个按钮,实现的效果是点击之后关闭Form1打开From2,由于我Form1是直接实例的,所以我用的this.close(),但是发现Form1没有被关闭,反而Form2正常打开了
2023年08月14日 06点08分 1
level 14
那你上代码,这么说没用,百分百你的问题
2023年08月14日 06点08分 2
level 8
第一个问题要么你没说明白,要么写错了
第二个问题, 描述也不到位, Form1和Form2实例的关系没有说明, 也没有说明启动方式, 如果Form1是项目自己原样那种启动方式, 你一旦close掉,整个程序就结束了, 除非Form2是在Main方法中进行接着Form1销毁后的流程走的, 否则不可能弹出来
2023年08月14日 07点08分 3
level 4
yydgys2007 楼主
这是form1
这是form2
这是main函数
2023年08月14日 07点08分 5
这不是default1和windows1吗
2023年08月14日 09点08分
@一颗程序猿o_0 哎呀,不要纠结窗口名啦
2023年08月14日 09点08分
level 5
在form2中使用form1中变量需要引用form1,并且form1.变量吧
2023年08月14日 09点08分 6
你把全局变量定义进main或者单独做一个类,并引用试试
2023年08月14日 09点08分
@snature1207 有一个问题,如果把全局变量定义成类之后,这个类在结束销毁的时候,全局变量也会被销毁吧?那就做不到跨窗口传参了
2023年08月14日 09点08分
@yydgys2007 还是在主程序中初始化,只不过跟主程序分开了,如果全局变量多,可以看着清楚一些,随便做做就写在主程序里好了
2023年08月14日 09点08分
那就有一个问题:如果在主函数里定义静态变量,然后实例化了窗口1,窗口1又实例化并显示了窗口2,此时静态变量还能在窗口2里使用,赋值吗?窗口1此时是不是无法关闭,因为是窗口1发起实例化窗口2的
2023年08月14日 09点08分
level 1
[笑眼] 评论相当精彩。新建一个公共类,然后里面写一个字段就行了。引用就可以
2023年08月17日 02点08分 8
哈哈,是,我后来改了思路,创建了包含静态对象的结构(我不需要进行操作,就不需要写类了)
2023年08月17日 02点08分
level 6
通常不是这么操作的,在各自的窗体中定义public参数,Form1简称1,Form2简称2
在1中打开2,并将1的参数传给2,同时1关闭(其实是隐藏),2关闭时显示1,并将2的参数回传给1;
在1中定义public的参数或者控件public System.Windows.Forms.TextBox textBox1;
在1的按钮click中
{
Form2 f = new Form2();
f.form1 = this;//把当前窗体保存起来
f.name = "需要传入的参数";
f.Show();
this.Hide();
}
2中定义2个public参数
public string name = string.Empty;
public Form1 form1;//存储被隐藏的窗体1
在2的FormClosed中
{
form1.textBox1.Text = name;
form1.button1.PerformClick();//可以回传参数,也可以操作1的控件
form1.Show();//还原窗体1,不需要就不做操作
}
2023年08月23日 05点08分 9
1