窗体间传值分分快三计划

作者:编程技术

 

分分快三计划 1分分快三计划 2主窗体.cs

        }
Form2里面包车型客车窗体load加载事件和单击开关事件

 

分分快三计划 3分分快三计划 4子窗体.cs

        {

private void buttonClick(object sender, EventArgs e)
{
  MessageBox.Show("1");
}

分分快三计划 5分分快三计划 6子窗体.cs

        public Form2(string txt)

// 委托、事件是 public 和全局的

分分快三计划 7分分快三计划 8子窗体.cs

                {

 

分分快三计划 9分分快三计划 10子窗体.cs

        {

 

        private void button1_Click(object sender, EventArgs e)
        {
            loginForm.Show();
        }
    }

            }


主窗体.cs

 private void Form2_Load(object sender, EventArgs e)

以下是持续自 Form1的 类 Form2

   public class frmMain:Form
   {
        ...
        frmControl controlForm=new frmControl(this);
        controlForm.Show();
    }

            }

public delegate void ButtonClickdHandle(object sender, 伊芙ntArgs e);//定义委托
public event ButtonClickdHandle UserControlButtonClicked;//定义事件

    public partial class ChildForm : Form
    {
        // 证明和定义委托
        public delegate void TitleChangedHandler(string title);
        public TitleChangedEventHandler TitleChanged;

private void button1_Click(object sender, EventArgs e)

以下是 基类 Form1

方法一

            Form frm=new Form2(txt);

private void Form2_Load(object sender, EventArgs e)
{
  this.UserControlButtonClicked = new ButtonClickdHandle(buttonClick);//后面是委托
  this.Text = "form2";
}

        public ChildForm()
        {
            InitializeComponent();
        }
     
        private void btn_Ok_Click(object sender, EventArgs e)
        {
            TitleChangedEventArgs e1=new TitleChangedEventArgs();
            e1.Title="Login sucessed";
            OnTitleChanged(e1);// 触发事件
            
        }
        // 触发事件的方法
        protected virtual void OnTitleChanged(TitleChangedEventArgs e)
        {
            if (TitleChanged != null)
                TitleChanged(this, e);
        }
    }

            //方法生龙活虎将日前窗体作为靶子传递到show出的窗体

public void button1_Click(object sender, EventArgs e)
{//button1 控件定义为 Public 属性
  UserControlButtonClicked(sender, e);//抛出事件
}

也足以在子窗体中定义二个自定义的事件,然后自定义一个平地风波参数,用来传递你想传递的片段新闻。代码如下:
主窗体.cs

            frm.Owner = this;

主窗体.cs

           frm.Show();

    public partial class ChildForm : Form
    {
        public class TitleChanged伊夫ntArgs : EventArgs // 事件参数类
        {
            private string title = "";
            public string Title
            {
                get{ return title; }
                set{ title = value; }
            }
        }
        // 注解委托
        public delegate void TitleChangedEventHandler(object sender, TitleChangedEventArgs e);
        // 定义事件
        public event TitleChangedEventHandler TitleChanged;

                }

在子窗体中自定义二个构造函数,参数类型是主窗体,当要展现子窗体的时候,就用那几个构造函数来实例化子窗体,然后把this指针传进去。代码如下:

                    (ff as TextBox).Text= this.textBox1.Text ;

    public class frmControl:Form  //子窗体,用来决定主窗体的一点突显!
    {
         private frmMain mainForm;
         public frmControl(frmMain mainForm)
         {
              this.mainForm=mainForm;
         }
         private void button1_Click(object sender,EventArgs e)
         {
               frmMain.textBox1.Text=this.textBox1.Text;  
               //把子窗体的文件框值传递给主窗体的文本框!
         }
     }

            this.textBox1.Text=text;

 

                    this.textBox1.Text = (ff as TextBox).Text;

分分快三计划 11分分快三计划 12主窗体.cs

            //方法一

        public ChildForm()
        {
            InitializeComponent();
        }   
        private void btn_Ok_Click(object sender, EventArgs e)
        {            
            if (TitleChanged != null)
                TitleChanged("Test Title"); //委托调用
            
        }
    }

            Form1 frm = (Form1)Owner;

    // 主窗体订阅那个事件就能够了
    public partial class MainForm : Form
    {
        private ChildForm loginForm = new ChildForm(); 
        public MainForm()
        {
            InitializeComponent();
            loginForm.TitleChanged  = 
            new ChildForm.TitleChangedEventHandler(FormTitleChanged);
        }

        }

    // 主窗体给委托变量赋值就足以了:
    public partial class MainForm : Form
    {
        private ChildForm loginForm = new ChildForm(); 
        public MainForm()
        {
            InitializeComponent();
            loginForm.TitleChanged = new  
                ChildForm.TitleChangedEventHandler(FormTitleChanged);
        }

        {

分分快三计划 13分分快三计划 14主窗体.cs

        }
Form2 里面包车型大巴构造函数选择参数

为了尤其收缩窗体之间的耦合度,大家得以用委托来贯彻这一个须要。代码如下:

            foreach (System.Windows.Forms.Control ff in frm.Controls)//遍历传递过来窗体的保有控件

子窗体.cs

            {

骨子里方法一不是很好,固然达成起来很简短,只是想更正窗体的标题文本,就把全副主窗体的援引都传送给子窗体,那样的法子不是很温婉,我们用接口来修正方面包车型客车点子,那样能够界定揭破给子窗体的效果与利益,裁减窗体之间的耦合度。代码如下:

             Form frm=new Form2();

方法二

        }
这种方法毫无与在把值回传到第三个窗体里面
其二种艺术就是写一个类,注明静态变量,然后接纳再传值,这种方法比较常用,这里就无须赘述了。
第三种情势就是宣称二个信托和事件
在Form2窗体注解委托和事件
public delegate void getTextdelegate(string text);//定义委托 写早class类外面,定义全局的
public static event getTextdelegate TextCool;//定义事件 写在类里,能够一向用窗体名调用

        private void button1_Click(object sender, EventArgs e)
        {
            loginForm.Show();
        }
    }

                if (ff is Text博克斯)//假使控件是TextBox类型

来源:

 

   public class frmMain:Form,IChangeTitle
   {
        ...
        frmControl controlForm=new frmControl(this);
        controlForm.Show();
        public void ChangeTitle(string title)
        {
             this.Text=title;
        }        
    }

            {

子窗体.cs

            foreach (var ff in frm.Controls)

主窗体.cs

 

        protected void FormTitleChanged(object sender, ChildForm.TitleChangedEventArgs e)
        {
            this.Text = e.Title;
        }

Form1 窗体里面包车型客车单击按键事件:

子窗体.cs

           Form2 frm=new Form2();

        protected void FormTitleChanged(string title)
        {
            this.Text = title;
        }

        }
这种传递,多用来将最近窗体作为靶子,传递到另个传递里面,使用当前窗体里面控件的值,在show出的Form2窗体能够平素改正Form1窗体的控件的值   
格局二:利用窗体类里面传递参数,在说show出的窗体的构造函数里面接纳参数
Form1里面包车型地铁单击事件

子窗体.cs

                    //if (ff.Name.Equals("textBox1"))若是是多少个文本框,这里还足以去name

方法四

        {

    public class frmControl:Form  //子窗体,用来调节主窗体的一点显示!
    {
         private IChangeTitle ichangeTitle;
         public frmControl(IChangeTitle ichangeTitle)
         {
              this.ichangeTitle=ichangeTitle;
         }
         private void button1_Click(object sender,EventArgs e)
         {
              // 通过接口来调用方法
              ichangeTitle.ChangeTitle(this.textBox1.Text);
         }
     }

            Form1 frm = (Form1)Owner;

方法三

            {

    public interface IChangeTitle:
    {
        void ChangeTitle(string title);
    }

        {

概念接口.cs

           Form2.TextCool = Form2_TextCool;

        {

            //选用传递过来的窗体对象,找到窗体上的控件举办赋值

        void Form2_TextCool(string text)

        }

            frm.Owner = this;

 private void button1_Click(object sender, EventArgs e)

 private void button1_Click(object sender, EventArgs e)

            }
        }
在Form1窗体里面调用

            frm.Show();

            //方法二 在窗体类里面传递参数

 private void button1_Click(object sender, EventArgs e)

        }

即可实以后Form2里面把值回传到Form1  里面了,在概念的委托里面是string类型,能够放object类型,那么就足以传大家想传的值了

            if (TextCool != null)

                }

        {

分分快三计划 15

        {

 private void button1_Click(object sender, EventArgs e)

            string txt = this.textBox1.Text;

           InitializeComponent();

                if (ff is TextBox)

                TextCool(this.textBox1.Text);

           this.textBox1.Text = txt;

            frm.Show();

                {

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划 dotNET C# WinForm 课堂知识巩固