问题描述
问题代码:publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){}privatevoidbutton4_Click(objectsender,EventArgse){Form2from2=newForm2();from2.Text="测试";closeButton.Text="关闭并返回主主程序";this.Visible=false;this.Enabled=false;from2.Visible=true;from2.Enabled=true;}}}publicpartialclassForm2:Form{publicForm2(){InitializeComponent();}privatevoidcloseButton_Click(objectsender,EventArgse){this.Visible=false;this.Enabled=false;Form1.Visible=true;//此行报错Form1.Enabled=true;//此行报错}}
觉得应该再new个form1,应该可以解决但是不知道应该把代码Form1form1=newForm1()加在哪?
解决方案
解决方案二:
privtetFrom1from1;publicForm2(Fromfrom){InitializeComponent();from1=from;}privatevoidcloseButton_Click(objectsender,EventArgse){this.Visible=false;this.Enabled=false;from1.Visible=true;from1.Enabled=true;}}
解决方案三:
Form1,这是类名,你应该用Form1的实例
解决方案四:
没实例化,要么构造函数传进来,要么属性设置传进来publicForm2(Form1form1){this.form1=form1;}
解决方案五:
按照MS推荐的做法是Form2添加一个closeButtonClick事件,在Form1中处理该事件。另外,Form2每次都是new一个新的,但closeButton单击时为什么都是隐藏,而不是关闭?
解决方案六:
在产生form2的时候,将form1的实例传过去,也就是this和#3差不多
解决方案七:
顶4楼,你这个编程方式有点怪异
解决方案八:
引用6楼johnliuyuan的回复:
顶4楼,你这个编程方式有点怪异
想隐藏form2弹回from1
解决方案九:
你这是典型的VB写法吧
解决方案十:
按你的写法,如果点10次form1的button4,就会生成10个Form2的实例。而且这些实例都不会释放。
解决方案十一:
privatevoidbutton4_Click(objectsender,EventArgse){Form2f=newForm2();f.Text="测试";f.FormClosed+=(s,arg)=>this.Visible=true;f.Show();this.Visible=false;}
把无关的代码都删掉!Form2跟Form1根本没有直接关系,根本不需要写什么Form1.Visible=true这样的代码。编写代码之前,你更重要地是学会与代码无关的知识。如果不知道这些,那就学笨了、学歪了,还不如不花钱学习。
解决方案十二:
Quote: 引用4楼qbilbo的回复:
按照MS推荐的做法是Form2添加一个closeButtonClick事件,在Form1中处理该事件。同一。在第二个closeButton按钮触发的事件中,应该写privatevoidcloseButton_Click(objectsender,EventArgse){this.Close();}一行代码。
解决方案十三:
Form1窗体中代码privatevoidbutton3_Click(objectsender,EventArgse){Form2form2=newForm2();form2.CloseEvent+=Form2_CloseEvent;form2.Show();this.Hide();}privatevoidForm2_CloseEvent(objectsender,EventArgse){MessageBox.Show("closeform");this.Show();}Form2窗体中代码publicdelegatevoidCloseDelegate(objectsender,EventArgse);publiceventCloseDelegateCloseEvent;privatevoidbutton1_Click(objectsender,EventArgse){if(CloseEvent!=null){CloseEvent(sender,e);}this.Close();}
代码多点。
解决方案十四:
当你听说“Form2关闭时,要让Form1显示出来”的时候,要结合“设计知识”首先来判断每一个动作的职责是谁来负责。根本不是Form2的职责的,就不要交给Form2来做。而如何决定哪些工作的职责归谁,这应该是你的老师教给你的。叫你一点编程代码,那太low了。应该教一点点软件设计知识,才能收学费。至于说到代码框架,比如说Form类本身就会抛出“FormClosing、FormClosed事件”,这也是必须掌握的知识。掌握这些,就用不着自己再去重新发明车轮子了。
解决方案十五:
引用13楼sp1234的回复:
当你听说“Form2关闭时,要让Form1显示出来”的时候,要结合“设计知识”首先来判断每一个动作的职责是谁来负责。根本不是Form2的职责的,就不要交给Form2来做。而如何决定哪些工作的职责归谁,这应该是你的老师教给你的。叫你一点编程代码,那太low了。应该教一点点软件设计知识,才能收学费。至于说到代码框架,比如说Form类本身就会抛出“FormClosing、FormClosed事件”,这也是必须掌握的知识。掌握这些,就用不着自己再去重新发明车轮子了。确实造了好大一个轮子,窗体带的事件就足够了。
解决方案:
引用6楼johnliuyuan的回复:
顶4楼,你这个编程方式有点怪异而且如引用8楼xarrows的回复:
你这是典型的VB写法吧是的,我这是由于各种各样的原因,需要开发个小windows软件,因为学过VB现在弄javaSE,没涉及过C#粗略的low了一眼C#内容觉得虽然都是面向对象的语言但还是差得太大了,更像VB6.0,于是我变像VB那样设置属性,设置事件。除非遇到BUG就动用学java是面向对象的方式考虑下那些代码错了尝试着排排错。。。
解决方案:
逻辑有问题,代码写的太乱了时间: 2024-10-23 09:55:50