winFrom在From1的按钮与From2的按钮界面交互出现问题

zhy934453950 2016-02-25 01:04:39
问题代码:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
}
private void button4_Click(object sender, EventArgs e)
{
Form2 from2 = new Form2();
from2.Text = "测试";
closeButton.Text = "关闭并返回主主程序";
this.Visible = false;
this.Enabled = false;
from2.Visible = true;
from2.Enabled = true;
}
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void closeButton_Click(object sender, EventArgs e)
{
this.Visible = false;
this.Enabled = false;
Form1.Visible = true;//此行报错
Form1.Enabled = true;//此行报错
}
}


觉得应该再new个form1,应该可以解决但是不知道应该把代码Form1 form1 = new Form1()加在哪?
...全文
252 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanqn 2016-02-25
  • 打赏
  • 举报
回复
逻辑有问题,代码写的太乱了
zhy934453950 2016-02-25
  • 打赏
  • 举报
回复
引用 6 楼 johnliuyuan 的回复:
顶4楼,你这个编程方式有点怪异
而且如
引用 8 楼 xarrows 的回复:
你这是典型的VB写法吧
是的,我这是由于各种各样的原因,需要开发个小windows软件,因为学过VB现在弄javaSE,没涉及过C#粗略的low了一眼C#内容觉得虽然都是面向对象的语言但还是差得太大了,更像VB6.0,于是我变像VB那样设置属性,设置事件。除非遇到BUG就动用学java是面向对象的方式考虑下那些代码错了尝试着排排错。。。
  • 打赏
  • 举报
回复
当你听说“Form2关闭时,要让 Form1显示出来”的时候,要结合“设计知识”首先来判断每一个动作的职责是谁来负责。根本不是 Form2的职责的,就不要交给 Form2 来做。而如何决定哪些工作的职责归谁,这应该是你的老师教给你的。叫你一点编程代码,那太 low 了。应该教一点点软件设计知识,才能收学费。 至于说到代码框架,比如说 Form 类本身就会抛出“FormClosing、FormClosed事件”,这也是必须掌握的知识。掌握这些,就用不着自己再去重新发明车轮子了。
绿豆丫 2016-02-25
  • 打赏
  • 举报
回复
引用 13 楼 sp1234 的回复:
当你听说“Form2关闭时,要让 Form1显示出来”的时候,要结合“设计知识”首先来判断每一个动作的职责是谁来负责。根本不是 Form2的职责的,就不要交给 Form2 来做。而如何决定哪些工作的职责归谁,这应该是你的老师教给你的。叫你一点编程代码,那太 low 了。应该教一点点软件设计知识,才能收学费。 至于说到代码框架,比如说 Form 类本身就会抛出“FormClosing、FormClosed事件”,这也是必须掌握的知识。掌握这些,就用不着自己再去重新发明车轮子了。
确实造了好大一个轮子,窗体带的事件就足够了。
绿豆丫 2016-02-25
  • 打赏
  • 举报
回复
Form1窗体中代码

private void button3_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.CloseEvent += Form2_CloseEvent;
            form2.Show();
            
            this.Hide();
        }

        private void Form2_CloseEvent(object sender, EventArgs e)
        {
            MessageBox.Show("close form");
            this.Show();
        }
Form2窗体中代码

public delegate void CloseDelegate(object sender, EventArgs e);
        public event CloseDelegate CloseEvent;
        private void button1_Click(object sender, EventArgs e)
        {
            if (CloseEvent != null)
            {
                CloseEvent(sender, e);
            }
            this.Close();
        }
代码多点。
  • 打赏
  • 举报
回复
[quote=引用 4 楼 qbilbo 的回复:] 按照MS推荐的做法是Form2添加一个closeButtonClick事件,在Form1中处理该事件。 同一。 在第二个 closeButton 按钮触发的事件中,应该写
  private void closeButton_Click(object sender, EventArgs e)
        {
            this.Close();
        }
一行代码。
  • 打赏
  • 举报
回复
private void button4_Click(object sender, EventArgs e)
{
    Form2 f = new Form2();
    f.Text = "测试";
    f.FormClosed += (s, arg) => this.Visible = true;
    f.Show();
    this.Visible = false;
}
把无关的代码都删掉! Form2跟 Form1根本没有直接关系,根本不需要写什么 Form1.Visible = true 这样的代码。编写代码之前,你更重要地是学会与代码无关的知识。如果不知道这些,那就学笨了、学歪了,还不如不花钱学习。
qbilbo 2016-02-25
  • 打赏
  • 举报
回复
按你的写法,如果点10次form1的button4,就会生成10个Form2的实例。而且这些实例都不会释放。
绿豆丫 2016-02-25
  • 打赏
  • 举报
回复
你这是典型的VB写法吧
zhy934453950 2016-02-25
  • 打赏
  • 举报
回复
引用 6 楼 johnliuyuan 的回复:
顶4楼,你这个编程方式有点怪异
想隐藏form2弹回from1
john_QQ:2335298917 2016-02-25
  • 打赏
  • 举报
回复
顶4楼,你这个编程方式有点怪异
正怒月神 2016-02-25
  • 打赏
  • 举报
回复
在产生form2的时候,将form1的实例传过去,也就是this 和#3差不多
qbilbo 2016-02-25
  • 打赏
  • 举报
回复
按照MS推荐的做法是Form2添加一个closeButtonClick事件,在Form1中处理该事件。 另外,Form2每次都是new 一个新的,但closeButton单击时为什么都是隐藏,而不是关闭?
sinodzh 2016-02-25
  • 打赏
  • 举报
回复
没实例化, 要么构造函数传进来,要么属性设置传进来 public Form2(Form1 form1) { this.form1=form1; }
zhou1986lin 2016-02-25
  • 打赏
  • 举报
回复
privtet From1 from1; public Form2(From from) { InitializeComponent(); from1=from; } private void closeButton_Click(object sender, EventArgs e) { this.Visible = false; this.Enabled = false; from1.Visible = true; from1.Enabled = true; } }
bdmh 2016-02-25
  • 打赏
  • 举报
回复
Form1,这是类名,你应该用Form1的实例

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧