【问题标题】:Open/show other Form with [X] Button Click C#使用 [X] 按钮打开/显示其他表单单击 C#
【发布时间】:2018-06-06 10:50:09
【问题描述】:

我有 2 个表单,Startform 是一个登录表单(Form1)和一个登录后打开的表单,Form2。

登录成功后form2显示。

f2.Show(); //form2 show
this.Hide(); //login(f1) hide

这行得通。

现在我希望,如果我按下 Form2 关闭并再次显示登录页面的红色 X 按钮(右上角)。

我在 Form2 中试过这个:

Form1 f1 = new Form1();
....
...
private void Main_FormClosing(object sender, FormClosingEventArgs e)
    {
      f1.show();
    }

但这只是关闭Form2而不打开From1,程序仍在后台运行

【问题讨论】:

  • 您需要显示现有的登录表单(您在上面调用.Hide() 的那个)还是新的?
  • @EpicKip 我想显示我隐藏的那个
  • @steffen1994 然后将您的 form2 构造函数更改为采用Form1 参数(因此将public Form2() 更改为public Form2(Form1 form))。然后在构造函数中将其分配给一个全局值并在其上调用.Show()
  • Application.OpenForms[0].Show();请强烈考虑不要求提供登录凭据,您的用户在登录 Windows 时已经提供了这些凭据。您放在上面的任何额外的都很可能存在严重的安全问题,不仅限于暴露密码。 winforms 应用程序与网页不同,您不是在与一个完全陌生的人打交道。
  • @steffen1994 在重复的 Thomas 链接中,这个答案:stackoverflow.com/a/43879608/2885376 就是我的意思

标签: c# formclosing


【解决方案1】:

在我的示例中,Form1 扮演您的 LoginForm 的角色

问题是你正在杀死一个Form2,它实际上已经创建了Form1 的实例(这里是你的登录表单)。所以当Form2 的实例消失时,它的所有本地实例也将消失。

您可以做一件事,同时从您的Form1Form1 的对象传递给Form2,创建Form2 的对象。

因此您不需要在Form2 中创建Form1 的实例,并且在关闭它时您只需调用Form1 的show 方法。

如下所示。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        //passing current class' object
        Form2 form2 = new Form2(this);

        form2.Show();
        this.Hide();
    }
}

和表格 2:

public partial class Form2 : Form
{
    Form1 m_form1;
    public Form2(Form1 form1)
    {
        InitializeComponent();
        m_form1 = form1;
    }

    private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        m_form1.Show();
    }
}

【讨论】:

  • 你好@Amit,我现在在我的代码中添加了这个,但它又是同样的问题,当我按下 X 时 form2 关闭但 form1 没有显示此代码
  • @steffen1994 你确定你没有在 Form2 的任何地方做new Form1() 吗?
  • 是的,我查了一遍代码,Form2中没有新的From1()
  • 你是如何传递密码和用户名的?去年我在我的 YouTube 频道上做了一个教程,我可以通过教程链接发布答案。
  • @Amit,我明白了,你的解决方案很好,问题是,它不适用于 private void Form1_FormClosing(object sender, FormClosingEventArgs e) {.... },但适用于 protected override void OnFormClosing(FormClosingEventArgs e) { m_form1.Show(); }
猜你喜欢
  • 2016-07-03
  • 2020-05-09
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
相关资源
最近更新 更多