1. 登陆逻辑

  • FrmMain 为主窗体(启动窗体)
  • FrmLogin 为登陆窗体

在“主窗体”中使用ShowDialog()方法显示“登陆窗体”,并通过“登陆窗体”的DialogResult告知“主窗体”是否登陆成功。

1.1 主窗体:

private void FrmMain_Load(object sender, EventArgs e)
{
FrmLogin frm = new FrmLogin();
if (frm.ShowDialog() == DialogResult.OK)
{
// 执行主窗体的一些初始化内容
}
else
{
this.Close(); // 关闭主窗体
}
}

1.2 登陆窗体:

private vode btn_Login_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}

2. 窗体间的数据传递

“登陆窗体”在执行完毕后,需要将登陆用的信息传递给“主窗体”,其传递的过程就是“暂时”将用户信息存在“主窗体”可以获取的“地方”,根据“地方”不同可以有一下几种方案。

新建 User.cs

public class User {
public string username;
public User(string username)
{
this.username = username;
}
}

2.1 将数据暂存在“登陆窗体”的Tag属性上

2.1.1 登陆窗体:

private vode btn_Login_Click(object sender, EventArgs e)
{
this.Tag = new User('rianman');
this.DialogResult = DialogResult.OK;
}

2.1.2 主窗体:

private void FrmMain_Load(object sender, EventArgs e)
{
FrmLogin frm = new FrmLogin();
if (frm.ShowDialog() == DialogResult.OK)
{
User user = frm.Tag as User; // 此处获取“登陆窗体”传递过来的数据
}
else
{
this.Close(); // 关闭主窗体
}
}

2.2 将数据暂存在“主窗体”的Tag属性上

2.2.1 登陆窗体:

private vode btn_Login_Click(object sender, EventArgs e)
{
FrmMain main this.Owner as FrmMain;
main.Tag = new User("rainman");
this.DialogResult = DialogResult.OK;
}

2.2.2 主窗体:

private void FrmMain_Load(object sender, EventArgs e)
{
FrmLogin frm = new FrmLogin();
if (frm.ShowDialog() == DialogResult.OK)
{
User user = this.Tag as User; // 此处获取“登陆窗体”传递过来的数据
}
else
{
this.Close(); // 关闭主窗体
}
}

2.3 将数据暂存在类的“静态成员”上

2.3.1 新建Context.cs

public class Context
{
public static User LoginUser = null;
}

2.3.2 登陆窗体:

private vode btn_Login_Click(object sender, EventArgs e)
{
Context.LoginUser = user;
this.DialogResult = DialogResult.OK;
}

2.3.3 主窗体:

private void FrmMain_Load(object sender, EventArgs e)
{
FrmLogin frm = new FrmLogin();
if (frm.ShowDialog() == DialogResult.OK)
{
User user = Context.LoginUser; // 此处获取“登陆窗体”传递过来的数据
}
else
{
this.Close(); // 关闭主窗体
}
}

2.4 将数据暂存在“主窗体”的特定属性上

2.4.1 登陆窗体:

private vode btn_Login_Click(object sender, EventArgs e)
{
FrmMain main = this.Owner as FrmMain;
main.LoginUser = new User("rainman");
this.DialogResult = DialogResult.OK;
}

2.4.2 主窗体:

public user LoginUser { get; set; }

private void FrmMain_Load(object sender, EventArgs e)
{
FrmLogin frm = new FrmLogin();
if (frm.ShowDialog() == DialogResult.OK)
{
User user = this.LoginUser; // 此处获取“登陆窗体”传递过来的数据
}
else
{
this.Close(); // 关闭主窗体
}
}

WinForm登陆:窗体间的数据传递的更多相关文章

  1. C#不同窗体间通信,数据传递

    在一个项目中,很多时候都需要在窗体间进行数据传递和通信,最觉见的是父子窗体之间的数据传递,比如登录ID,各个窗体都需要知道.有很多文章都写了这方面的问题,提出很多优秀的方法,鄙人不才,搜了一些资料之后 ...

  2. Windows窗体间的数据交互

    轻松掌握Windows窗体间的数据交互                                     作者:郑佐 2004-04-05 Windows 窗体是用于 Microsoft Win ...

  3. iOS:控制器间的数据传递

    在iOS开发中遇到的控制器间的数据传递主要有两种情况:顺传递与逆传递.顺传递是指数据的传递方向和控制器的跳转方向相同(如图1):逆传递是指数据的传递方向和控制器的跳转方向相反(如图2).这里分别介绍这 ...

  4. 【转】Unity3d的单例及场景间的数据传递

    http://blog.csdn.net/zy19940906/article/details/47724387  单例是场景间切换时传递数据的最常见的方式之一,在unity中,很多方法被封装,有时候 ...

  5. hive、sqoop、MySQL间的数据传递

    hdfs到MySQL csv/txt文件到hdfs MySQL到hdfs  hive与hdfs的映射: drop table if exists emp;create table emp ( id i ...

  6. React Native移动开发实战-3-实现页面间的数据传递

    React Native使用props来实现页面间数据传递和通信.在React Native中,有两种方式可以存储和传递数据:props(属性)以及state(状态),其中: props通常是在父组件 ...

  7. fragment间的数据传递

    今天我将要讲的是fragment间的数据是如何进行传递的.这里我将举个简单的例子. 首先要有个MainActivity,它托管了MainFragment,而MainFragment又托管了DatePi ...

  8. vue组件间的数据传递

    父组件向子组件传递数据 在 Vue 中,可以使用 props 向子组件传递数据.   App.vue HelloWorld.vue 在子组件部分: 如果需要从父组件获取 logo 的值,就需要使用 p ...

  9. 零基础Android学习笔记-03 窗口间的数据传递

    1.通过全局变量来传递. 新建一个全局的类继承于Application package com.example.helloworld; import android.app.Application; ...

随机推荐

  1. 记录一则RMAN备份策略修正案例

    背景:在给某客户处理问题时,发现客户数据库的备份空间即将用尽,进一步查看发现是用户数据库的当前RMAN备份策略存在潜在问题,需要修改备份策略. 环境:SunOS 5.10 + Oracle 11.2. ...

  2. ListView中的数据表格写入Excel中

    SaveFileDialog sfd = new SaveFileDialog(); sfd.DefaultExt = "xls"; sfd.Filter = "Exce ...

  3. 如何让你的网站支持https

    如何让你的网站支持https 当今世界的主流网站基本都是使用https对外界提供服务,甚至有某些公司建议完全使用https, 那么https是什么呢?请参考如下的图解,https是在我们通常说的tcp ...

  4. learn shell

    the basic shell skills.   Bourne shell sh ksh Bash psh zsh C shell csh tcsh   [root@bogon temp]# cat ...

  5. 【原创】Kafka topic常见命令解析

    本文着重介绍几个常用的topic命令行命令,包括listTopic,createTopic,deleteTopic和describeTopic等.由于alterTopic并不是很常用,本文中就不涉及了 ...

  6. C#图片加水印实例与代码

    本文要提供的类可以为图片加文字水印,以及判断是否是图片文件.经过测试可运行,例子请下载:http://hovertree.com/h/bjaf/5qc5eh6y.htm 例子效果图: 以下是Hover ...

  7. [WCF编程]9.性能与限流

    一.性能概述 WCF服务的性能取决于很多因素.出了CPU.RAM和网络性能等常见的因素外,实例上下文模式.并发模式.数据契约的设计或使用的绑定等与WCF有关的因素都起着重要的作用. 实例上下文模式用来 ...

  8. luogg_java学习_06_面向对象特性之封装和继承

    这篇博客总结了1天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 因为前不久偶然发现某网站直接复制粘贴我的博客,交谈之后他们修改 ...

  9. Linux 定时任务crontab

    crontab定时任务格式 1 * * * * * command 2 第1列表示分钟1-59 每分钟用*或者 */1表示 3 第2列表示小时1-23(0表示0点) 4 第3列表示日期1-31 5 第 ...

  10. Atitit.提升 升级类库框架后的api代码兼容性设计指南

    Atitit.提升 升级类库框架后的api代码兼容性设计指南 1. 增加api直接增加,版本号在注释上面增加1 2. 废弃api,使用主见@dep1 3. 修改api,1 4. 修改依赖import, ...