2 個UserControl 的傳值問題


問題描述:有2UserControlUserControl1 里有一個ButtonUserControl2 里面有一個TextBox,這2個控件都加載到了主窗體Form1 上。要求的是,點擊 UserControl1 button 顯示 UserControl2TextBox輸入的內容。 

一般來講有2種方式:

1. 公開屬性

2. 聲明事件 

來看看這2種方式的操作代碼:

1. 公開2個UserControl的屬性。並在Form1中使用

public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
            
        }

        public Button Btn // Define Btn as public
        {
            get
            {
                return this.button1;
            }
        }    
    }
UserControl1

 

 public partial class UserControl2 : UserControl
    {
        public UserControl2()
        {
            InitializeComponent();
        }

        public TextBox textbox  // define textbox as public
        {
            get
            { return this.textBox1; }
        }
    }
UserControl2

   在From1中注冊Button的事件

 public partial class Form1 : Form
    {
        public Form1()
        {           
            InitializeComponent();       
            this.userControl11.Btn.Click += new EventHandler(Btn_Click);            
        }

        void Btn_Click(object sender, EventArgs e)
        {
            MessageBox.Show(this.userControl21.textbox.Text);
        }
}
注冊Button事件

2. 聲明事件

public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
            
        }
        public event EventHandler BtnClick; //define one public Click event.

        private void button1_Click(object sender, EventArgs e)
        {
            BtnClick(sender, e); // just do it.
        }
    }
UserControl1

 

 public partial class UserControl2 : UserControl
    {
        public UserControl2()
        {
            InitializeComponent();
        }

        public event Action<string> GetText; //define one action to get textbox's  text value

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            GetText(textBox1.Text); // Get this text after input.
        }
    }
UserControl2

  在Form1中調用

 public partial class Form1 : Form
    {
        public Form1()
        {           
            InitializeComponent();
            this.userControl21.GetText += new Action<string>(userControl21_GetText); // register gettext event.
            this.userControl11.BtnClick += new EventHandler(userControl11_Click); // Register Click event.
        }
        string text = null; 
        void userControl11_Click(object sender, EventArgs e)  // implement it
        {
            MessageBox.Show(text);
        }
        
        void userControl21_GetText(string obj) // implement it.
        {
            text = obj;
        }
}
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM