登录进到主界面后,怎么关闭登录窗口?

my_edxp 2008-12-09 03:28:14
我现的是this,Hide();但是不想隐藏它,要直接关了。
但是,this.Close()它又登录不进去,直接连登录窗体也关了,要怎么做,它既关了,也能进到主界面?
学习中~~0~~
...全文
1203 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sheng450422 2010-03-20
  • 打赏
  • 举报
回复
16楼的方法比较好,如果举一个具体例子或者给一些参考代码就更好了
hernmmy 2008-12-10
  • 打赏
  • 举报
回复
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
//Application.EnableVisualStyles();
//Application.SetCompatibleTextRenderingDefault(false);
//XmlAdapter.SaveConfigFile();
// 全局初始化
DXGlobalUtil.GlobalInit();
// 验证是否为正版软件
if (AppInformation.SoftReg == true)
{
if (EDAdapter.CheckValue <= 0)
{
return;
}
}

// 登录验证
using (SUserLoginForm frm = new SUserLoginForm())
{
if (DialogResult.OK != frm.ShowDialog())
{
return;
}
}

// 运行程序
DXGlobalUtil.ApplicationRun();
}
}
lvg 2008-12-10
  • 打赏
  • 举报
回复
up
lchh0917 2008-12-10
  • 打赏
  • 举报
回复
mark
Sugar_Tiger 2008-12-10
  • 打赏
  • 举报
回复
在我BLOG里写了三种方法:http://blog.csdn.net/Sugar_Tiger/archive/2008/10/23/3131401.aspx
你自己看看。
Grave_rain 2008-12-09
  • 打赏
  • 举报
回复
一般情况下是隐藏窗口,再在主窗口中的formClosed事件中加Application.Exit()退出应用程序

private void MainForm_FormClosed(object sender, FormClosedEventArgs e)//关闭时退出程序
{
Application.Exit();
}
特别 2008-12-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lovefootball 的回复:]
static void Main()
{
Form login = new FrmLogin();
if (login.ShowDialog() == DialogResult.OK)//登录成功就设置登录窗体的DialogResult为OK
{
Application.Run(new FrmMain());
}
}
[/Quote]
推荐这种做法,一般来说,Application.Run的仍然应该是主窗体,
登录是否成功通过登录窗体的对话框返回值来确定,关键的是不能在登录窗体中启动主程序。否则一关闭登录窗体,整个程序也就结束了。
如果偏要在登录窗体中打开主程序的话,那么可以改成这样static void Main()中启动应用程序应该这样写
static void Main()
{
....
Application.Run(); //不加参数调用

}
deng520159 2008-12-09
  • 打赏
  • 举报
回复
一般可以将窗体运行在托盘上

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

using System.IO;
using System.Configuration;
namespace 学籍管理系统
{
public partial class Form1 : Form
{
//ini文件路径
private string loginstr = Application.StartupPath + @"\login.ini";
//ini文件段落名
private string section = "CopyRightByDengliang";
private string servername = ".";
private string databasename = "";
private fmmain main = new fmmain();
private fmlogin login;
public Form1()
{
InitializeComponent();
login = new fmlogin(main);
this.timer1.Enabled = true;
}
[DllImport("kernel32.dll")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
[DllImport("kernel32.dll")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
private void initform()
{
this.timer1.Enabled = false;
//取得程序集Title
string maininfo = StringCom.AssemblyTitle;
//取得程序集公司名
string maincompany = StringCom .AssemblyCopyright;
notifyIcon1.ShowBalloonTip(3000,maininfo+"已经启动!",maincompany,ToolTipIcon.Info);
//环境检测
if (!File.Exists(loginstr))
{
StringCom.showInformation("注册文件login.ini已经丢失!程序不能启动!");
Application.Exit();
}
else
{
//注册信息读取
WriteiniValues("constr", "server=.;Integrated Security=SSPI;Database=StuInfoManagement");
string constr=ReadiniValues("constr");
if (constr != "")
{
//设置Setting.settings
Properties.Settings config = Properties.Settings.Default;
config.ConnectionString = constr;
config.Save();
}
if(ReadiniValues("checked")=="1")
{
//读取用户名
string username = ReadiniValues("username");
if (username != "")
login.txtloginusername.Text = username;
//读取密码
string pwd = ReadiniValues("pwd");
if (pwd != "")
login.txtloginpwd.Text = pwd;
login.cbpwd.Checked = true;
}
//数据库验证
bool result = ConnectionCom.ValidateConnection(ConnectionCom.getconnstr());//验证数据库是否能正常连接
if (!result)
{
//StringCom.showInformation(result.ToString());
Application.Exit();
}
else
{
//登陆窗体显示
this.Visible = false;
this.showLogin();
}

}



}
/// <summary>
/// 写入注册文件
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
private bool WriteiniValues(string key, string value)
{
bool result=false;
try
{
WritePrivateProfileString(section ,key ,value,loginstr);
result=true;
}catch
{
}
return result;
}
/// <summary>
/// 读取配置文件
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
private string ReadiniValues(string key)
{
string result="";
StringBuilder temp = new StringBuilder(200);
int i = GetPrivateProfileString(this.section,key,"无法读取配置文件",temp ,200,loginstr);
if (temp.ToString() == "无法读取配置文件")
{
// StringCom.showInformation("配置文件读取出错!");
}
else
{
result = temp.ToString();
}
return result;

}
/// <summary>
/// 显示登陆
/// </summary>
private void showLogin()
{

login.Show();
显示界面ToolStripMenuItem.Enabled = false;
隐藏界面ToolStripMenuItem.Enabled = true;
}
private void Form1_Load(object sender, EventArgs e)
{

}

private void toolStripMenuItem2_Click(object sender, EventArgs e)
{

}

private void 退出程序QToolStripMenuItem_Click(object sender, EventArgs e)
{
//更改主体窗体隐藏参数
main.IsSave = false;
Application.Exit();
}

private void toolStripMenuItem1_Click(object sender, EventArgs e)
{

}

private void timer1_Tick(object sender, EventArgs e)
{
initform();

}

private void 显示界面ToolStripMenuItem_Click(object sender, EventArgs e)
{
main.Show();
ToolStripMenuItem own = (ToolStripMenuItem)sender;
own.Enabled = false;
隐藏界面ToolStripMenuItem.Enabled = true;
}

private void 隐藏界面ToolStripMenuItem_Click(object sender, EventArgs e)
{
main.Hide();
ToolStripMenuItem own = (ToolStripMenuItem)sender;
own.Enabled = false;
显示界面ToolStripMenuItem.Enabled = true;
}
}
}
龙宜坡 2008-12-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 myh0305 的回复:]
你在主界面的load事件中调用登录对话框
用showdialog的方式弹出来, 验证之后关闭对话框, 显示主界面
[/Quote]


就这样
net5i 2008-12-09
  • 打赏
  • 举报
回复
.NET中,应用程序的启动窗口被认为是主窗口,而当主窗口关闭了,应用程序就会自动退出
这时因为应用程序的消息循环和主窗口句柄挂接在一起的,所以主窗口销毁后,程序就会退出。

登录,以及启动屏幕,一般是这样做的:

1、Application.Run启动的还是主窗口;
2、然后在主窗口的构造函数的最开始,启动“启动屏幕窗口”(如果没有启动屏幕,就掠过这个);
3、然后在主窗口的Load事件中,启动“登录窗口”
注意:要以模态的形式来启动窗口,即:ShowDialog(),
这一步中,如果用户取消登录,则再执行Application.Exit()退出程序;
4、在窗口的Shown事件的最后,关闭“启动屏幕窗口”(如果没有启动屏幕,就掠过这个)。

以上是一个比较好的启动过程
zjs1109 2008-12-09
  • 打赏
  • 举报
回复
在program.cs里面设置
using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace SStraining
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
登录窗体 啊 = new 登录窗体();
啊.ShowDialog();
if (登录窗体.登录变量 == true)
{ Application.Run(new MainForm());}

}
}
}


意思是你要在登录窗体里面设置一个登录变量bool
猿敲月下码 2008-12-09
  • 打赏
  • 举报
回复
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
frmLogin frm = new frmLogin();
using (frm)
{
if (frm.ShowDialog() == DialogResult.OK)//内容验证密码通过this.DialogResult=DialogResult.OK; this.close();
{
Application.Run(new frmMain(frm.userid, frm.power));
frm.Dispose();
}
}
}
dai78 2008-12-09
  • 打赏
  • 举报
回复
在Program里先显示登陆界面,把登陆界面结果传递给全局变量,关闭登陆界面,Run(主窗体界面)
luckapple2 2008-12-09
  • 打赏
  • 举报
回复
先隐藏下,主界面load时关闭登陆界面。
zoOoz 2008-12-09
  • 打赏
  • 举报
回复
static void Main()
{
Form login = new FrmLogin();
if (login.ShowDialog() == DialogResult.OK)
{
Application.Run(new FrmMain());
}
}

在FrmLogin中登录成功后,如下设置

this.DialogResult = DialogResult.OK;
this.Close();

如果不成功,

this.DialogResult = DialogResult.NO;
this.Close();
love小在在 2008-12-09
  • 打赏
  • 举报
回复
很简单,做两个窗体
zorro75317 2008-12-09
  • 打赏
  • 举报
回复
这是主界面的代码:
private Form f;
public Main(Form form)
{
this.f = form;
InitializeComponent();
}

在formClosing事件中
/// <summary>
/// 窗体关闭事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
f.Close();
}
zorro75317 2008-12-09
  • 打赏
  • 举报
回复
关闭好像不行啊,只能隐藏!
然后把当前当前界面传过去,等主界面关闭的时候登陆界面也关闭!
下面是我做的,可参考一下:
这是登陆界面:

/// <summary>
/// 确定按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnLogin_Click(object sender, EventArgs e)
{
//验证用户名是否为空
if (txtName.Text == "")
{
MessageBox.Show("请输入用户名!");
return;
}
//验证密码是否为空
if (txtPwd.Text == "")
{
MessageBox.Show("请输入密码!");
return;
}
//实例化业务对象
LoginBiz biz = new LoginBiz();
//获取文本框中的值
string name = txtName.Text.Trim();
string password = txtPwd.Text.Trim();
//调用用户登录方法
DataSet ds = biz.UserLogin(name, password);
if (ds.Tables[0].Rows.Count!=0)
{
string name1 = ds.Tables[0].Rows[0]["CPI_Name"].ToString();
string password1 = ds.Tables[0].Rows[0]["Password"].ToString();
if (name.Equals(name1) && password.Equals(password1))
{

Main main = new Main(this);
main.Show();
this.Visible = false;

//获取登录名
LoginInfo.loginName = txtName.Text.Trim();


}
}
else
{
MessageBox.Show("用户名或密码错误,请重新登录!");
return;
}

}

lovefootball 2008-12-09
  • 打赏
  • 举报
回复
static void Main()
{
Form login = new FrmLogin();
if (login.ShowDialog() == DialogResult.OK)//登录成功就设置登录窗体的DialogResult为OK
{
Application.Run(new FrmMain());
}
}
wode1212008 2008-12-09
  • 打赏
  • 举报
回复
先show再close
加载更多回复(5)
项目名称:精仿QQ2013局域通讯(7.5更新版) 版本号:7.5 最新版本 下载内容: (C#)CC2013局域网通讯源码一份, 可引用至工具箱最新版dll一份 实现功能: 1.界面库中多达25个自定义换肤控件,让每个控件设设属性就能达到你想要的效果,支持图片换肤和色调绘制。 2.四边阴影,毛边效果,可以设置阴影宽度和阴影颜色,支持所有系统。 3.拥有密码键盘输入,防护更贴心。 4.8种圆角窗体模式供你选择,淋漓尽致,润滑如圆。 5.登录界面后,有登陆提示窗,提示上次登录的城市和时间。 6.皮肤随心变:拖动任意一张图片至界面,就可以改变皮肤。 7.皮肤色调获取:改变皮肤的同时,将计算图片色调,再将其运用到窗体背景色。 8.皮肤尾部渐变:上下左右方均可实现,渐变皮肤。 9.皮肤拖拉方向:可以选择皮肤在拉伸的时候,粘着哪一边拖拉。 10.GDI+界面重绘,处理消息机制,3种移动模式和拉伸是否启用只需要设置一个属性的事就可以解决。 11.界面渐变闪现和闪退:不再像平凡的突然出现,采用API渐变机制,渐渐出现和消失,win7系统下还有动态缩小至任务的效果。 12.完美好友列表,可添加上千好友,不卡不掉线,还可以拖动好友到其他分组。 13.好友悬浮至头像可以查看详细资料卡。 14.窗口可调渐变后透明度:让窗体看起来更像是Vista玻璃窗体风格。 15.聊天窗口可发送图片,大文件,表情,还有震动。 16.按钮控件背景色拥有继承窗体背景色调的功能,让整体色调保持一致。 17.更是有和如出一辙的扣扣截图。仿真度也达到100%,完美修复所有已知BUG。 18.聊天窗口,可以调字体颜色和字体样式等多项功能。 20.SkinLabel与SkinButton控件字体与窗体标题可以根据背景色暗亮度自动调节字体为黑还是白。 21.MessageBox提示框的美化,并继承调用窗口的色调与背景,MessageBox可所谓已达到帅气的不能再帅气的境界了。 22.天气皮肤自动变,所有窗体根据当地天气自动决定皮肤背景,CC最帅气功能之一。 23.个人资料卡及聊天窗体拥有动态CC秀展示。 24.界面拖动换肤的同时,所关联的子窗体皮肤也会跟着变。 25.多线程大文件传输功能,支持无上限大文件传输,有进度条显示进程度。 26.界面库已封装了大图取色调,颜色判断暗亮等多项功能。 27.如果你觉得获取天气让你的登录太慢不想要的话,注释相关调用方法即可快速登录界面库交流群:306485590 本人QQ:345015918 注意: Demo版不包括更新,为方便用户查看和使用属性等方法,dll只轻微加密。想反编译的就不要尝试了,里面有上百个类,改错改到你哭。 介意购买正版,永久更新配源码。 看截图或者想购买商业版的用户请访问以下地址: http://www.51aspx.com/code/TotalLikeQQ2013 特权:购买商业版的用户,有权利享有最快的更新服务,第一时间将最新版本的dll源码送到你手上。 使本项目源码或本项目生成的DLL前请仔细阅读以下协议内容,如果你同意以下协议才能使用本项目所有的功能,否则如果你违反了以下协议,有可能陷入法律纠纷和赔偿,作者保留追究法律责任的权利。 1、你可以在开发的软件产品中使用和修改本项目的源码和DLL,但是请保留所有相关的版权信息。 2、不能将本项目源码与作者的其他项目整合作为一个单独的软件售卖给他人使用。 3、不能传播本项目的源码和DLL,包括上传到网上、拷贝给他人等方式。 4、以上协议暂时定制,由于还不完善,作者保留以后修改协议的权利。 时间:2013-7-5 作者: 乔克斯 请保留以上版权信息,否则作者将保留追究法律责任。

110,533

社区成员

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

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

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