窗体转换

制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体

直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false

                Form1 f1 = new Form1();
f1.Show();
this.Visible = false;

另:这样写的话再关闭第二个窗口的时候,程序并没有完全结束,第一个登陆窗口仍然存在,虽然不显示

因此我们用到构造函数传值,并且这样可以实现打开唯一窗口(不重复打开同一个窗口)

___________________________________________________________________________________________________________________________

构造函数————传值

构造函数可以设置参数,当实例化这个窗体时,可以把某个我们需要的类型的参数传递进来,比如要点击登录时,将一个User自定义对象以及登录窗体本身传递给将要打开的窗体

    Form2 F2 = null;
public Form1(Form2 f2, Users u)
{
InitializeComponent();
F2 = f2;
       txt_username.Text = u.UserName;//传递进来的对象使用示例
}

由于作用域问题,传递进来的参数只能在构造函数中使用,可在外面设置一个全局变量,在构造函数中把传递进来的值赋给全局变量,这样在本程序中其他事件可以随意调用,如上

因为form1不是主窗体 所以关闭form1时并不会结束程序,我们只需要写一个关闭form1时触发的事件即可(FormClosing或FormClosed,两个功能没有特别明显的区别)

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
F2.Close();
}

此时使用到了上面传递进来的f2,通过赋值给全局变量F2从而控制了form2的关闭。

___________________________________________________________________________________________________________________________

唯一窗体实现

如果多次点击同一个登陆按钮,打开了多个登陆后的窗体,这样是不合理的

同样可以通过构造函数传值来控制,在主窗体中创建一个list<Form>公共集合(利用便利集合来取值窗口,建立一个包含窗口的集合,再利用if,标记变量来判断)

    public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} public List<Form> Flist = new List<Form>(); private void button1_Click(object sender, EventArgs e)
{
int count = 0;//标记变量 标记集合中是否已有此窗体 Form2 f2 = new Form2(this);//实例化一个Form2窗体并且把Form1自己传进去
foreach (Form f in Flist)//遍历集合
{
if (f is Form2)
{
count++;
}
} if (count == 0)//如果集合中没有Form1窗体 则打开它
{
Flist.Add(f2);
f2.Show();
}
}
}

那么,当Form2关闭的时候,设置关闭事件,将From2自己从集合中删掉(点击关闭。当前页面也可关闭)

public partial class Form2 : Form
{
Form1 F1 = null;//定义全局变量用于在下面使用,先等于空,在构造函数运行,也就是打开窗体的时候再赋值 public Form2(Form1 f1)
{
InitializeComponent();
F1 = f1;
} private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
F1.Flist.Remove(this);//把Form2自己从集合中删掉
}
}

这样,就实现了当Form2处于没打开的状态时,点击按钮将Form2打开,否则不执行任何操作,并且当Form2关闭时,删掉集合中的Form2,这样再次点击按钮的时候可以重新打开Form2

___________________________________________________________________________________________________________________________

1、ComboBox绑定数据源后,可设置显示的数据与其value数据,value数据是不显示出来的,但是可以在程序中使用,尤其方便在数据库多个表之间查找数据

有一个隐式显示。一个直接显示

            cmb_class.DataSource = new ClassData().select();//自定义方法,返回一个List<Class>集合
cmb_class.DisplayMember = "ClassName";//设置下拉菜单显示的是班级的名字
cmb_class.ValueMember = "ClassCode"; //设置下拉菜单每一项的value值是班级的代号

数据库中有四条班级数据,此时在程序中显示的是:(当我们点击时,他也会吧我们设置的班级编号显示出来)

我们写一个事件,当此下拉菜单的选中数据发生改变时触发,弹出其value值让我们查看

        private void cmb_class_SelectedValueChanged(object sender, EventArgs e)
{
MessageBox.Show(cmb_class.SelectedValue.ToString());
}

2、点击按钮,如果想要打开的窗口已经打开,则让其焦点进入:可通过获取窗口使用Activate()方法实现

winform 传值,构造函数等的更多相关文章

  1. C#实现WinForm传值实例解析

    C#实现WinForm传值的问题经常会做为公司面试的题目,那么作为学习C#以及WinForm传值,我们需要掌握哪些方法和思路呢?下面我们就向你介绍详细的思路和实现的具体步骤,希望对你有所帮助. C#实 ...

  2. 关于Winform 2.0以后多线程不能更新UI的办法

    DotNet 2.0以后Winform在多线程Debug模式下更新UI会报这个错: 线程间操作无效: 从不是创建控件"XXX"的线程访问它. 解决办法如下: 1.在Winform的 ...

  3. winform常用方法

    1.对象的初始化器: Class a = new Class() { id = , name = "张三" } 2.窗体间传值    ①构造函数    ②单例函数 //单例模式:确 ...

  4. C#调用百度地图 api

    转  http://blog.csdn.net/kkkkkxiaofei/article/details/8663377 这一篇,记录一下我调用的地图API实现的功能.下面介绍的都是一些片段的节选,不 ...

  5. C#调用百度地图API经验分享(四)

    这一篇,记录一下我调用的地图API实现的功能.下面介绍的都是一些片段的节选,不能直接复制就运行.在实现之前肯定要加载地图,先放一个webbroser控件,然后如下: private void Form ...

  6. winform修改、打开窗体、构造函数传值

    制作登录窗体: 制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体 直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false Form ...

  7. Winform 主窗体更换 构造函数传值

    制作登录窗体: 制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体 直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false Form ...

  8. winform打开唯一窗体、构造函数传值

    制作登入窗体: 制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体 直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false Form ...

  9. 20150214—winform中使用构造函数传值

    构造函数,在函数初始化时就会执行的函数方法,在创建一个类之后,系统会自动在此类中生成一个与类名相同的函数,其中只包含一句代码: InitializeComponent(); 新建一个名字相同的函数,然 ...

随机推荐

  1. Codeforces Round #196 (Div. 2)

    A 题意:O(-1) 思路:排个序搞定. B 题意:O(-1) 思路:坑了我好久,这个框框水平垂直比例固定,分两种情况即可,不能旋转,我想多了,分了四种情况. C 题意:一列n个位置,让你填m个数,当 ...

  2. 3_STL算法

    1.常用遍历算法1.1 for_each for_each(v1.begin(),v1.end(),show); void show(int &n) //回调函数的入口地址 { cout &l ...

  3. Mysql的时间和日期

    datetime    占8个字节    可以显示日期同时显示时间  yyyy-mm-dd hh:mm:ss 显示范围  1000-01-01 00:00:00----9999-12-31 23:59 ...

  4. SpringMvc输入地址报错

    出现上面的错误如果不是路径的问题,就应该找环境的问题,我这里的问题是tomcat7+jdk6,应该是jdk7或以后的版本(因为是web socket) 对应的版本http://tomcat.apach ...

  5. SpringBoot实例

    7player 7号球员 -- Show Time !跳至内容 首发 左边锋 技术流 外援 教练 7号 基于SpringBoot + Mybatis实现SpringMVC Web项目[原创] 目录 [ ...

  6. 【iCore3 双核心板】例程三十二:UART_IAP_ARM实验——更新升级STM32

    实验指导书及代码包下载: http://pan.baidu.com/s/1hrnLJwC iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  7. 服务器(Liunx)打包发布java web工程

    Liunx服务器上打包发布web工程(开发工具Idea) 1.首先使用Idea自带的打包功能(点击package打包) 2.然后链接到服务器(我这里用的是Xshell链接工具) 3.将打好的war包传 ...

  8. UFS

    ● UFS vs eMMC 1. UFS有分离的读写通道,可以同时进行读写操作(双向),但是eMMC在同一时刻只能读或写. 2. UFS有一个命令队列,将命令进行排序.因此,多个命令可以同时处理,从而 ...

  9. CentOS 6.6 安装 PHP Memcached 扩展

    PHP 的 Memcached扩展使用了 libmemcached 库提供的 api 与 memcached 服务端进行交互.它同样提供了一个 session 处理器(memcached). PHP ...

  10. mac下docker使用笔记

    安装docker https://docs.docker.com/mac/ 启动docker环境launchpad -> Docker Quickstart Terminal ##       ...