跨窗体操作

Posted 失恋副作用

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跨窗体操作相关的知识,希望对你有一定的参考价值。

                                                              Users uuu = new UsersData().SelectUser(uname, pwd);
 跨窗体操作的时候,如果点开第二个窗体那么第一个窗体就要关闭,但是,一旦关闭第一个窗体那么第二个也会关闭,因为主窗体一关,其余的子窗体都会随着关闭,所以,要使用控件额属性,进行隐藏例如:
 Form2 f2 = new Form2();
                f2.Show();
                this.Visible = false;
                
                在第二个通过第二个窗体来操控第一个窗体
                 Form1 F1 = null;
        public Form2(Form1 f1)
        {
            InitializeComponent();
            F1 = f1;
            label1.Text = u.NickName + ",欢迎你!";
            F5();
        }
        
        第二个窗体的触发事件
        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            F1.Close();    注意:不能写f1,因为作用域的问题,所以需要先定义一个F,然后让F=f,这样用F就可以了
        }
        
        最后还要在这里加参数this
        Form2 f2 = new Form2(this);    
                f2.Show();
                this.Visible = false;
                因为要显示第二个窗体的xxx欢迎你,所以需要在构造函数的时候传进一个Users类的参数u,并且,不是u.UserName,而是昵称,注意用label1.Text 接收一下
                 Form1 F1 = null;
        public Form2(Form1 f1, Users u)
        {
            InitializeComponent();
            F1 = f1;
            label1.Text = u.NickName + ",欢迎你!";
            F5();
        }
        那么第一个窗体那里就不能是一个参数了,还应该有个
        Form2 f2 = new Form2(this, uuu);
                f2.Show();
                this.Visible = false;
                
                
                
                
                实例化出窗体三
                private void button1_Click(object sender, EventArgs e)
        {
            Form3 f3 = new Form3(this);      注意这里的this
            f3.Show();
        }
                
      public partial class Form3 : Form
        {
        Form2 F2 = null;
        public Form3(Form2 f2)
        {
            InitializeComponent();

            F2 = f2;
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string s = textBox1.Text;
            F2.label2.Text = s;

        }
                                                              Users uuu = new UsersData().SelectUser(uname, pwd);
 跨窗体操作的时候,如果点开第二个窗体那么第一个窗体就要关闭,但是,一旦关闭第一个窗体那么第二个也会关闭,因为主窗体一关,其余的子窗体都会随着关闭,所以,要使用控件额属性,进行隐藏例如:
 Form2 f2 = new Form2();
                f2.Show();
                this.Visible = false;
                Visible:确定该控件是显示的还是隐藏的(在属性的行为里)
                这时如果关闭第二个的话,那么第一个并没有关闭,那样是无法关闭的,那么就应该在第二个通过第二个窗体来操控第一个窗体,那么就需要(用到属性行为里的fromclosing),在第二个窗体的构造函数里传入第一个窗体的类名和参数,
                 Form1 F1 = null;
        public Form2(Form1 f1)
        {
            InitializeComponent();
            F1 = f1;
            label1.Text = u.NickName + ",欢迎你!";
            F5();
        }
        
        然后再在第二个窗体的触发事件里双击点fromclosing,
        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            F1.Close();    注意:不能写f1,因为作用域的问题,所以需要先定义一个F,然后让F=f,这样用F就可以了
        }
        然后写F1.Close();就是在关闭第二个窗体前就关闭第一个窗体,
        最后还要在这里加参数this,这个this代表的是第一个窗体,在哪个里写就代表哪个,下面这一步是在第一个窗体里写的,因为是点击第一个窗体要开启第二个窗体,所以实例化出第二个窗体:
        Form2 f2 = new Form2(this);    
                f2.Show();
                this.Visible = false;
                因为要显示第二个窗体的xxx欢迎你,所以需要在构造函数的时候传进一个Users类的参数u,并且,不是u.UserName,而是昵称,注意用label1.Text 接收一下
                 Form1 F1 = null;
        public Form2(Form1 f1, Users u)
        {
            InitializeComponent();
            F1 = f1;
            label1.Text = u.NickName + ",欢迎你!";
            F5();
        }
        那么第一个窗体那里就不能是一个参数了,还应该有个
        Form2 f2 = new Form2(this, uuu);
                f2.Show();
                this.Visible = false;
                
                
                
                
                点击第二个窗体,打开第三个窗体,并且使第二个窗体的label1.Text随着第三个窗体的combobox.Text的变化而实时变化
                首先在第二个窗体的按钮里写点击事件,实例化出窗体三
                private void button1_Click(object sender, EventArgs e)
        {
            Form3 f3 = new Form3(this);      
            f3.Show();
        }
                然后在窗体三的文本框里找到textbox1.Textchanged,
                 public partial class Form3 : Form
    {
        Form2 F2 = null;
        public Form3(Form2 f2)
        {
            InitializeComponent();

            F2 = f2;
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string s = textBox1.Text;
            F2.label2.Text = s;

        }

 

以上是关于跨窗体操作的主要内容,如果未能解决你的问题,请参考以下文章

跨窗体操作

跨线程操作Treeview

跨线程Winforms控件编辑[重复]

winform跨界面进行的操作

实现Winform 跨线程安全访问UI控件

如何跨线程调用Windows窗体控件