登录进到主界面后,怎么关闭登录窗口? 我现的是this,Hide();但是不想隐藏它,要直接关了。但是,this.Close()它又登录不进去,直接连登录窗体也关了,要怎么做,它既关了,也能进到主界面?学习中~~0~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 主界面Show()了以后再关闭登录界面阿~ 给主界面传递一个数据或者引用,然后关闭登陆界面,主截面自己出来,或者就在Program里面设置一个变量,登陆成功,登陆窗体自己关闭掉,主截面出现,登陆数据写入Program的公共对象中(自己定义一个公共对像) 你在主界面的load事件中调用登录对话框用showdialog的方式弹出来, 验证之后关闭对话框, 显示主界面 static void Main(){ Form login = new FrmLogin(); if (login.ShowDialog() == DialogResult.OK)//登录成功就设置登录窗体的DialogResult为OK { Application.Run(new FrmMain()); }} 关闭好像不行啊,只能隐藏!然后把当前当前界面传过去,等主界面关闭的时候登陆界面也关闭!下面是我做的,可参考一下:这是登陆界面:/// <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; } } 这是主界面的代码: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(); } 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(); 先隐藏下,主界面load时关闭登陆界面。 在Program里先显示登陆界面,把登陆界面结果传递给全局变量,关闭登陆界面,Run(主窗体界面) 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(); } } } 在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 .NET中,应用程序的启动窗口被认为是主窗口,而当主窗口关闭了,应用程序就会自动退出这时因为应用程序的消息循环和主窗口句柄挂接在一起的,所以主窗口销毁后,程序就会退出。登录,以及启动屏幕,一般是这样做的:1、Application.Run启动的还是主窗口;2、然后在主窗口的构造函数的最开始,启动“启动屏幕窗口”(如果没有启动屏幕,就掠过这个);3、然后在主窗口的Load事件中,启动“登录窗口” 注意:要以模态的形式来启动窗口,即:ShowDialog(), 这一步中,如果用户取消登录,则再执行Application.Exit()退出程序;4、在窗口的Shown事件的最后,关闭“启动屏幕窗口”(如果没有启动屏幕,就掠过这个)。以上是一个比较好的启动过程 一般可以将窗体运行在托盘上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; } }} 推荐这种做法,一般来说,Application.Run的仍然应该是主窗体,登录是否成功通过登录窗体的对话框返回值来确定,关键的是不能在登录窗体中启动主程序。否则一关闭登录窗体,整个程序也就结束了。如果偏要在登录窗体中打开主程序的话,那么可以改成这样static void Main()中启动应用程序应该这样写static void Main(){....Application.Run(); //不加参数调用} 一般情况下是隐藏窗口,再在主窗口中的formClosed事件中加Application.Exit()退出应用程序 private void MainForm_FormClosed(object sender, FormClosedEventArgs e)//关闭时退出程序 { Application.Exit(); } 在我BLOG里写了三种方法:http://blog.csdn.net/Sugar_Tiger/archive/2008/10/23/3131401.aspx你自己看看。 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(); } } 怎样记住账号 c# 数据库备份问题 求C#提取网页正文内容代码 怎么在下面这个函数里面让前台某列(或者某行)的颜色改变啊? 在vs中如何用C#画出一个三角形? 新手求解--只读索引 如何控制toolbar上按钮的按下和恢复状态? 直接使用XmlDocument,能否格式化输出一个Xml文件的内容到屏幕? c#位操作问题!!!求大神赐教 如何删除父子表记录 关于C#事务处理错误 C# VS2005 使用Media中的SoundPlayer, 在线程中SoundPlayer.PlaySync(); 在声音没有播放完的时候线程退出了, 请问问是怎么回事呢?
用showdialog的方式弹出来, 验证之后关闭对话框, 显示主界面
{
Form login = new FrmLogin();
if (login.ShowDialog() == DialogResult.OK)//登录成功就设置登录窗体的DialogResult为OK
{
Application.Run(new FrmMain());
}
}
然后把当前当前界面传过去,等主界面关闭的时候登陆界面也关闭!
下面是我做的,可参考一下:
这是登陆界面:/// <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;
} }
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();
}
{
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();
{
/// <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();
}
}
}
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
这时因为应用程序的消息循环和主窗口句柄挂接在一起的,所以主窗口销毁后,程序就会退出。登录,以及启动屏幕,一般是这样做的:1、Application.Run启动的还是主窗口;
2、然后在主窗口的构造函数的最开始,启动“启动屏幕窗口”(如果没有启动屏幕,就掠过这个);
3、然后在主窗口的Load事件中,启动“登录窗口”
注意:要以模态的形式来启动窗口,即:ShowDialog(),
这一步中,如果用户取消登录,则再执行Application.Exit()退出程序;
4、在窗口的Shown事件的最后,关闭“启动屏幕窗口”(如果没有启动屏幕,就掠过这个)。以上是一个比较好的启动过程
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;
}
}
}
登录是否成功通过登录窗体的对话框返回值来确定,关键的是不能在登录窗体中启动主程序。否则一关闭登录窗体,整个程序也就结束了。
如果偏要在登录窗体中打开主程序的话,那么可以改成这样static void Main()中启动应用程序应该这样写
static void Main()
{
....
Application.Run(); //不加参数调用}
{
Application.Exit();
}
你自己看看。
{
/// <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();
}
}