![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; namespace testconroler { public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); } /// <summary> /// 控件标志设定及this传参数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { if (checkBox1.Text == "checkBox1") { checkBox1.CheckState = CheckState.Checked; checkBox2.CheckState = CheckState.Checked; } Form2 form = new Form2(this); form.ShowDialog(); } } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace testconroler { public partial class Form1 : Form { /// <summary> /// Form1中含有上面的控件 /// </summary> public Form1() { InitializeComponent(); } private void userControl11_Load(object sender, EventArgs e) { } } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace testconroler { public partial class Form2 : Form { public Form2() { InitializeComponent(); } /// <summary> /// Form2想从Form1种接收一个和Form1中完全一样的控件 /// 包括点选状态 关于过滤的测试 /// </summary> private Control form = null; public Form2(Control formtest) { InitializeComponent(); form = formtest; } private void Form2_Load(object sender, EventArgs e) { this.Controls.Add(form); } } }
Control控件
Form1窗体
Form2
描述:
Form2中写了一个窗体的构造函数,该构造函数可以接收一个控件,用于接收控件中this控件。
private Control form = null;
public Form2(Control formtest)
{
InitializeComponent();
form = formtest;
}
在控件的button中有这样一段代码,代码中if判断只是为了设定证明From2种接收的控件正是控件中this引用传递过来的,如果Form2中的add的控件点选状态和控件本身的点选状态一样,则证明Form2加载了本来属于Form1的控件。
private void button1_Click(object sender, EventArgs e)
{
if (checkBox1.Text == "checkBox1")
{
checkBox1.CheckState = CheckState.Checked;
checkBox2.CheckState = CheckState.Checked;
}
Form2 form = new Form2(this);
form.ShowDialog();
}
Form2中在load时就加载控件。
private void Form2_Load(object sender, EventArgs e)
{
this.Controls.Add(form);
}
点击Form1的控件按钮,Form1的控件传递到了Form2中,即窗体Form1变得空白。从这我们可以看出引用this传递,this本身只有一个,在该例子中,this指代控件,他只能存在于一个窗体中,而不能被两个窗体同时拥有,及一个this不能被两个对象同时引用。