winform程序中,我想实现如下的效果:当程序开始运行的时候,登录界面与主窗体界面同时显示,并且登陆界面在主界面之上;我写的程序如下所示,效果是达到了,但是有一个问题,登录成功之后我无法将用户信息传到主界面,
说明: frmMain 为主窗体;frmUserLogin为登陆窗体,
我的思路是这样的:
1.首先在program.cs文件中设置应用程序的启动窗体frmMain,代码如下:
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}
}
2.然后在frmMain的load事件中,实例化一个frmUserLogin对象,并将它show出来,代码如下:
frmUserLogin logon = new frmUserLogin();
logon.MdiParent = this;
logon.Show();
3。通过上面两步,好象就已经达到我想得到的运行效果,即主窗体在下,登陆窗体在上。
问题就在下面:我在frmUserLogin界面上定义了两个buttion按钮,buttion1为"登入",button2为"取消",
登入按钮的click事件定义如下:
private void button1_Click(object sender, EventArgs e)
{
首先对用户名和密码进行判断,代码我在此省略,要说明的是,在我的项目中
已经定义了一个用户类,下面的userLogin其实是用户类的一个对象,ds是一个dataset类的实例,它里面的内容是通过查询用户名和密码之后填充的,我现在的问题就是想把这个userLogin传送到frmMain窗体,因为在frmMain 中我已经实例化了一个Users 类的对象globalUser,我不知道怎么把这里的userLogin对象传给frmMain中的globalUser对象
if(验证成功)
{
userLogin.username=txtName.text;
userLogin.userpwd=txtPwd.text;
userLogin.dept=ds.tables[0].rows[0]["dept"].tostring();
Form frm = this.MdiParent;
frm.globaluser=userLogin ???? 好像frm根本就没有globaluser....这句话肯定有错,不知道怎么去写
this.Close();
}
}
说明: frmMain 为主窗体;frmUserLogin为登陆窗体,
我的思路是这样的:
1.首先在program.cs文件中设置应用程序的启动窗体frmMain,代码如下:
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}
}
2.然后在frmMain的load事件中,实例化一个frmUserLogin对象,并将它show出来,代码如下:
frmUserLogin logon = new frmUserLogin();
logon.MdiParent = this;
logon.Show();
3。通过上面两步,好象就已经达到我想得到的运行效果,即主窗体在下,登陆窗体在上。
问题就在下面:我在frmUserLogin界面上定义了两个buttion按钮,buttion1为"登入",button2为"取消",
登入按钮的click事件定义如下:
private void button1_Click(object sender, EventArgs e)
{
首先对用户名和密码进行判断,代码我在此省略,要说明的是,在我的项目中
已经定义了一个用户类,下面的userLogin其实是用户类的一个对象,ds是一个dataset类的实例,它里面的内容是通过查询用户名和密码之后填充的,我现在的问题就是想把这个userLogin传送到frmMain窗体,因为在frmMain 中我已经实例化了一个Users 类的对象globalUser,我不知道怎么把这里的userLogin对象传给frmMain中的globalUser对象
if(验证成功)
{
userLogin.username=txtName.text;
userLogin.userpwd=txtPwd.text;
userLogin.dept=ds.tables[0].rows[0]["dept"].tostring();
Form frm = this.MdiParent;
frm.globaluser=userLogin ???? 好像frm根本就没有globaluser....这句话肯定有错,不知道怎么去写
this.Close();
}
}
解决方案 »
- winForm 点击一个button1的同时也执行button2
- OWC 提供的Excel 支持分组吗?
- 关于单引号的正则的高难问题
- C#连接数据库
- 网站根目录下有n多个aspx文件,怎样插入广告
- 文字显示红色问题,帮写这个方法
- Windows中怎么读写app.config中的值?
- 难度贴:如何在另一个程序的进程中创建一个已知类型的ActiveX控件?
- 页面有验证控件后为什么sub_btn.Attributes.Add("onclick","return confirm('您确认要出库吗?')");失效?
- asp.net 导出word
- VS2005中AJax控件的問題
- DataGridView绑定list<T>显示不了数据
frmUserLogin logon = new frmUserLogin();
logon.MdiParent = this;
类名.frmLogin = logon;
logon.Show(); 然后你验证的时候,直接用 类名.frmLogin.globaluser来做了
static void Main()
{ UserLogin frm = new UserLogin(); // 验证窗体内 成功则执行 this.DialogResult=DialogResult.OK 默认返回DialogResult.Cancel
if (frm.ShowDialog() == DialogResult.Cancel)
{
Application.Exit(); return;
} Application.Run(new frmMain());
}
你可以重载frmUserLogin的构造函数
private Users localUser;
public frmUserLogin(ref Users globalUser)
{
this.localUser = globalUser;
}
在frmMain_Load中
frmUserLogin logon = new frmUserLogin(this.globalUser);
logon.MdiParent = this;
logon.Show(); 当然,你最好是两个窗体的namespace都指定成一个,这样把Users类定义在相同的namespace中。
winfrom 中传值应该很方便的
还有你的"frm.globaluser=userLogin ???? 好像frm根本就没有globaluser....这句话肯定有错,不知道怎么去写
"放在主页面载入事件里的对话框关闭之后写
即然你写了用户类(userlogin)那么整个应该程序运行时的数据传递都可以通过此类来进行.
//教你个简单的//登录窗体类 传递一个登录对象实体类 //在父窗体 new子窗体并显示的时候 传递一个空的对象实体类进去//当子窗体登录成功后 记录登录信息到实体类 然后关闭子窗体//当父窗体结束了对子窗体显示的时候 察看实体类是否为空 //然后。
取Login.属性.
用户验证,是必备界面,在以前反复比对过包括楼上提过的其他的用法,解释一下这种用法的好处:
(1)登录验证在先,如果通不过不用加载比较复杂的主界面,响应速度快。
(2)验证通过后,不占用资源,自动释放掉了。
(3)用窗体固有的状态值DialogResult传递是否登录成功的信息,不用增加全局变量(属性)。
首先把登陆窗口中的需要的变量声明为静态的。
public frmMain(form f)
{
f.变量1=x;
}