以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Dot NET,C#,ASP,VB 』  (http://bbs.xml.org.cn/list.asp?boardid=43)
----  c# winform 用子窗体刷新父窗体,子窗体改变父窗体控件的值  (http://bbs.xml.org.cn/dispbbs.asp?boardid=43&rootid=&id=83672)


--  作者:卷积内核
--  发布时间:3/1/2010 4:41:00 PM

--  c# winform 用子窗体刷新父窗体,子窗体改变父窗体控件的值
第一种方法:

用委托,Form2和Form3是同一组

Form2

C#代码
using System;   
using System.Collections.Generic;   
using System.ComponentModel;   
using System.Data;   
using System.Drawing;   
using System.Text;   
using System.Windows.Forms;   
  
namespace TestMouseMove   
{   
    public delegate void SetVisiableHandler();   
  
    public partial class Form2 : Form   
    {   
        public Form2()   
        {   
            InitializeComponent();   
        }   
        private void button1_Click(object sender, EventArgs e)   
        {   
            Form3 frm = new Form3(new SetVisiableHandler(SetVisiable));   
            frm.Show();   
        }   
  
        private void SetVisiable()   
        {   
            SetVisiable(this.label1, !this.label1.Visible);   
        }   
  
        private void SetVisiable(Control control, bool visiable)   
        {   
            if (this.Controls.Contains(control))   
            {   
                control.Visible = visiable;   
            }   
        }   
  
    }   
}  

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace TestMouseMove
{
    public delegate void SetVisiableHandler();

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form3 frm = new Form3(new SetVisiableHandler(SetVisiable));
            frm.Show();
        }

        private void SetVisiable()
        {
            SetVisiable(this.label1, !this.label1.Visible);
        }

        private void SetVisiable(Control control, bool visiable)
        {
            if (this.Controls.Contains(control))
            {
                control.Visible = visiable;
            }
        }

    }
}

Form3

C#代码
using System;   
using System.Collections.Generic;   
using System.ComponentModel;   
using System.Data;   
using System.Drawing;   
using System.Text;   
using System.Windows.Forms;   
  
namespace TestMouseMove   
{   
    public partial class Form3 : Form   
    {   
        private SetVisiableHandler m_setVisible;   
  
        public Form3(SetVisiableHandler setvisible)   
        {   
            InitializeComponent();   
            this.m_setVisible = setvisible;   
        }   
        private void btnVisible_Click(object sender, EventArgs e)   
        {   
            if (this.m_setVisible != null)   
            {   
                this.m_setVisible();   
            }   
        }   
  
    }   
}  

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace TestMouseMove
{
    public partial class Form3 : Form
    {
        private SetVisiableHandler m_setVisible;

        public Form3(SetVisiableHandler setvisible)
        {
            InitializeComponent();
            this.m_setVisible = setvisible;
        }
        private void btnVisible_Click(object sender, EventArgs e)
        {
            if (this.m_setVisible != null)
            {
                this.m_setVisible();
            }
        }

    }
}


--  作者:卷积内核
--  发布时间:3/1/2010 4:42:00 PM

--  
第二种方法:

用变量,Form4和Form5是同一组

Form4

C#代码
using System;   
using System.Collections.Generic;   
using System.ComponentModel;   
using System.Data;   
using System.Drawing;   
using System.Text;   
using System.Windows.Forms;   
  
namespace TestMouseMove   
{   
    public partial class Form4 : Form   
    {   
        public Form4()   
        {   
            InitializeComponent();   
        }  

        #region <B style="COLOR: black; BACKGROUND-COLOR: #99ff99">子</B>窗口刷新父窗口的值   
  
        private string strLabel1 = "";   
  
        public string StrLabel1   
        {   
            get  
            {   
                return strLabel1;   
            }   
            set  
            {   
                strLabel1 = value;   
                this.label1.Text = strLabel1;   
            }   
        }  
        #endregion   
  
        private void button1_Click(object sender, EventArgs e)   
        {   
            Form5 form5 = new Form5(this);//这里注意传个this   
            form5.Show();   
        }   
    }   
}  

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace TestMouseMove
{
    public partial class Form4 : Form
    {
        public Form4()
        {
            InitializeComponent();
        }

        #region 子窗口刷新父窗口的值

        private string strLabel1 = "";

        public string StrLabel1
        {
            get
            {
                return strLabel1;
            }
            set
            {
                strLabel1 = value;
                this.label1.Text = strLabel1;
            }
        }
        #endregion

        private void button1_Click(object sender, EventArgs e)
        {
            Form5 form5 = new Form5(this);//这里注意传个this
            form5.Show();
        }
    }
}

Form5

C#代码
using System;   
using System.Collections.Generic;   
using System.ComponentModel;   
using System.Data;   
using System.Drawing;   
using System.Text;   
using System.Windows.Forms;   
  
namespace TestMouseMove   
{   
    public partial class Form5 : Form   
    {   
        Form4 form4 = new Form4();   
  
        public Form5(Form4 formFrm)//这个构造方法里有参数   
        {   
            form4 = formFrm; //这个必须要有   
            InitializeComponent();   
        }   
  
          
        private void button1_Click(object sender, EventArgs e)   
        {   
            form4.StrLabel1 = this.textBox1.Text;   
        }   
    }   
}  


--  作者:卷积内核
--  发布时间:3/1/2010 4:50:00 PM

--  

同上面1用委托!

代码实现

Form1中,一个Lable1;在Form2中控制Form1中的Lable1的显示或隐藏!


Form1代码:


C# code
namespace WindowsApplication2
{
    public delegate void SetVisiableHandler();

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2(new SetVisiableHandler(SetVisiable));
            frm.Show();
        }

        private void SetVisiable()
        {
            SetVisiable(this.label1, !this.label1.Visible);
        }

        private void SetVisiable(Control control, bool visiable)
        {
            if (this.Controls.Contains(control))
            {
                control.Visible = visiable;
            }
        }
    }
}


Form2代码


C# code
namespace WindowsApplication2
{
    public partial class Form2 : Form
    {
        private SetVisiableHandler m_setVisible;
        public Form2(SetVisiableHandler setvisible)
        {
            InitializeComponent();
            this.m_setVisible = setvisible;
        }

        private void btnVisible_Click(object sender, EventArgs e)
        {
            if (this.m_setVisible != null)
            {
                this.m_setVisible();
            }
        }
    }
}


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
78.125ms