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. SDN/NFV若干问题

    1.首先谈一谈网络技术和组网技术的关系 网络可分为两层:业务网.承载网.业务网主要是组织业务系统,而承载网主要是用来传输信息流:包括传送网(点到点数据专线).数据网(端到端连接).内容分发网(点到多点 ...

  2. 代码的坏味道(2)——过大的类(Large Class)

    坏味道--过大的类(Large Class) 特征 一个类含有过多字段.函数.代码行. 问题原因 类通常一开始很小,但是随着程序的增长而逐渐膨胀. 类似于过长函数,程序员通常觉得在一个现存类中添加新特 ...

  3. jQuery-1.9.1源码分析系列(十) 事件系统——主动触发事件和模拟冒泡处理

    发现一个小点,先前没有注意的 stopPropagation: function() { var e = this.originalEvent; ... if ( e.stopPropagation ...

  4. web.config配置

    <appSettings> <add key="DepartmentRootID" value="A90AEAEC-E3D4-43DE-BB67-854 ...

  5. 基于<MediaElement>的WPF视频播放器(终章)【3】

    一.前言 对于<MediaElement>前两章介绍了差不多了,其实好的界面还需要UI工程师的配合,比如帮忙设计下按钮的样式等等.同样视频本身也需要吸引人,不然做的再好的播放器也没用.之后 ...

  6. SQL Server帐号孤立的问题解决

    网站近日经常遭到攻击,好几次数据库挂马,前几天把论坛升级了,今天又升级了数据库,把之前的MSSQL 2000 升级到MSSQL 2005,用的是数据库还原功能还原的,遇到了这个帐号孤立的问题. 什么是 ...

  7. Java集合概述

    容器,是用来装东西的,在Java里,东西就是对象,而装对象并不是把真正的对象放进去,而是指保存对象的引用.要注意对象的引用和对象的关系,下面的例子说明了对象和对象引用的关系. String str = ...

  8. 流的文件操作(File)

    一.流的分类: 1.流按照方向分类:分为输入流和输出流,流的操作是相对于内存而言. 输入流的定义:当我们从数据源中将数据读取到内存中就称为输入流,也叫读取流. 输出流的定义:当我们将内存中处理好的数据 ...

  9. entityframework学习笔记--001

    最近想重新好好学习一下entityframework,于是在院子里找到了一篇不错的博客.下面把学习的过程记录下来,方便以后复习. 学习过程参考大神的博客:http://www.cnblogs.com/ ...

  10. AMD and CMD are dead之KMD.js之懒

    缘由 "懒"在软件设计中,有着重大的意义.最常见的两种"懒",便是: 懒得计算 懒得加载 "懒得计算"常见于服务器端: 比如Multipla ...