C#打开另一窗口关闭当前窗口的问题

我做了一个登陆界面,希望点击登陆以后关闭当前界面。不是隐藏当前界面。this.close用不了,全关了.求解答... 我做了一个登陆界面,希望点击登陆以后关闭当前界面。
不是隐藏当前界面。
this.close用不了,全关了.
求解答
展开
 我来答
fujie724
推荐于2017-12-16 · TA获得超过1187个赞
知道小有建树答主
回答量:154
采纳率:100%
帮助的人:272万
展开全部

您好,这是一个经典的问题。这里涉及到一个你怎么安排登陆界面和主画面的问题。

一般来说我们的思维是现有登陆界面,才有主画面。其实这样做有一个弊端。

那就是你得把登陆界面作为主程序,就算登陆成功,你也只能把登陆界面Hide()隐藏掉,而不能关掉它,释放内存。这样做显然是不专业的。。。。

 

一般我们用的方法是这样。

将主画面作为程序启动的类。

然后在主画面的构造函数或者load事件中使用

if(登陆界面.ShowDialog() != DialogResult.OK)

{

      this.Close();

}

 

将登陆界面在主画面还未显示之前就把它作为模式对话框显示出来。

然后在登陆画面中验证用户密码,如果正确就设置this.DialogResult = DialogResult.OK;

登陆画面就会自动关闭,返回到主画面的构造函数,程序继续执行。

 

而当登陆画面如果被关闭,或者点击取消,就设置this.DialogResult = DialogResult.Cancel;

那么登陆画面也会自动关闭,返回到主画面的构造函数时,程序就会执行this.Close();

从而关闭整个程序。

 

那如果登陆画面中用户名密码验证不正确呢?那当然是弹出对话框提示用户输入正确的密码,而不用设置this.DialogResult的值了。

 

举个简单的例子吧。

假设,登录的窗体叫做LoginForm,登录成功后的窗体叫做MainForm。

 

那么我会这么做,先把MainForm设为程序启动窗体,在program.cs文件里改一下。这个应该都会。

 

然后在MainForm类里的构造函数写上

public class MainForm : Form
{
    public void MainForm_Load(object sender, EventArgs e)
    {
        LoginForm login = new LoginForm();
        if(login.ShowDialog != DialogResult.OK)
            this.Close();
    }
}

然后在LoginForm类里,在做登录的时候写上

public void CheckLogin()
{
    //假设这个函数做登录的验证
    if(登录成功)
    {
        this.DialogResult = DialogResult.OK;
    }
}
百度网友022523ba3
2014-01-02 · TA获得超过678个赞
知道小有建树答主
回答量:416
采纳率:100%
帮助的人:246万
展开全部

这个不难,你可以这样做

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new 主界面());//这里一定要先执行主界面
        }

然后在主界面的构造函数内这样做

主界面构造函数()
{
    登录界面 aa = new 登录界面();
    object obj = aa.ShowDialog();//不能用show,一定要用ShowDialog,这样可以返回你登录成功后的一些数据
}

这样就没问题了,你可以在登录成功后使用close关闭登录界面了

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友387227639
推荐于2016-01-16 · TA获得超过143个赞
知道答主
回答量:85
采纳率:0%
帮助的人:75.7万
展开全部
菜鸟,看到你写的问题,我笑了,因为小弟/大哥当年也遇到过!给你贴一段代码,然后稍作讲解!这里主要修改Program.cs中的代码。
Program.cs代码如下:

static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form1 F = new Form1(); F.ShowDialog(); if (Form1.IsOk) { Application.Run(new MainForm()); } } }

注:Form1是登陆窗体,MainForm是指登陆后跳转到的那个窗体,也就是主窗体!
这个时候程序会根据Program.cs中的程序,首先执行 Form1 F = new Form1();和F.ShowDialog();这两段,意思是将Form1窗体即登陆窗体以对话框的形式展示出来,然后用户输入用户名和密码,如果输入正确,则给Form1中的静态变量ISOK赋值为True.
也就是在登录窗体中定义一个public static bool IsOK=false; 当用户通过验证时(用户名密码正确),将其值赋值为True。
然后我们回到Program.cs,现在开始执行 if (Form1.IsOk) { Application.Run(new MainForm()); }
如果通过验证,即用户名密码正确,则运行主窗体,如果不正确,则不会进行跳转!不知道明白不?
需要毕业设计,可以找我!邮箱:chenwolong@163.com或1429677330@qq.com
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式