winform 传值,构造函数等

窗体转换

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

直接在按钮点击事件中,实例化一个想要打开的窗体 使用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()方法实现

时间: 2024-10-12 12:56:11

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

百度地图API

本文我将从如何使用地图API(本文以百度为例,谷歌类似)开始,往后的扩展行的内容详见后续文章.1.打开链接http://developer.baidu.com/map/jshome.htm  这里有很多DEMO,或者你直接百度搜索“百度地图API”,第一个就是.进入后有很多方向供你选择,由于现在开源的地图API都是JS脚本写的,所以我上面的链接就只针对JAVASCRIPT进行介绍.  即使是编程菜鸟(像我这种),也知道当你在任何一个开发环境下写代码时,都需要加入头文件,例如,你要在C++里使用c

C#调用百度地图 api

转  http://blog.csdn.net/kkkkkxiaofei/article/details/8663377 这一篇,记录一下我调用的地图API实现的功能.下面介绍的都是一些片段的节选,不能直接复制就运行.在实现之前肯定要加载地图,先放一个webbroser控件,然后如下: [csharp] view plaincopyprint? private void Form1_Load(object sender, EventArgs e) { string str_url = Appli

C# 调用百度地图web服务API

1.关于百度提供的接口中的方法的实用,这里有很多官方提供的DEMO(http://developer.baidu.com/map/jshome.htm). 2.为了能与JS交互,首先引入using System.Security.Permissions: 在命名空间里添加: [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] [System.Runtime.InteropServices.ComVisibleAttrib

winform打开唯一窗口、构造函数传值

制作登录窗体: 制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体 直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false Form1 f1 = new Form1(); f1.Show(); this.Visible = false; 另:这样写的话再关闭第二个窗口的时候,程序并没有完全结束,第一个登陆窗口仍然存在,虽然不显示 因此我们用到构造函数传值,并且这样可以实现打开唯一窗口(不重复打开同一个窗口) 构造函数传值: 构造

20150214&mdash;winform中使用构造函数传值

构造函数,在函数初始化时就会执行的函数方法,在创建一个类之后,系统会自动在此类中生成一个与类名相同的函数,其中只包含一句代码: InitializeComponent(); 新建一个名字相同的函数,然后使用一个参数,已构成此函数的另一个重载方法,这个参数可以是任何类型,string,int,甚至是自己创建的类,例如以下代码中新建的构造函数的参数就是以自己创建的类为参数,这里的传值主要用来传用户的登陆路信息. namespace dati_150128 { public partial class

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

制作登录窗体: 制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体 直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false Form1 f1 = new Form1(); f1.Show(); this.Visible = false; 另:这样写的话再关闭第二个窗口的时候,程序并没有完全结束,第一个登陆窗口仍然存在,虽然不显示 因此我们用到构造函数传值,并且这样可以实现打开唯一窗口(不重复打开同一个窗口) 构造函数传值: 构造

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

制作登录窗体: 制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体 直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false Form1 f1 = new Form1(); f1.Show(); this.Visible = false; 登陆界面 namespace WindowsFormsApplication1 { public partial class Login : Form { public string usern

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

制作登入窗体: 制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体 直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false Form1 f1 = new Form1(); f1.Show(); this.Visible = false; 另:这样写的话再关闭第二个窗口的时候,程序并没有完全结束,第一个登陆窗口仍然存在,虽然不显示 因此我们用到构造函数传值,并且这样可以实现打开唯一窗口(不重复打开同一个窗口) 构造函数传值: 构造

C# WinForm 父窗体 子窗体 传值

C# WinForm 父窗体 子窗体 传值 本次示例效果如下:Form1为父窗体(包含textBox1.button1)Form2为子窗体(包含textBox2.button2) 父窗体给子窗体传值==================1.点击Form1的button1 打开Form2  父窗体给子窗体传值 可以调用重载子窗体的构造函数 直接传入相关数值 public partial class Form1 : Form    {        public Form1()        {