c#子窗体与父窗体相互控制

YY:对比一下系统自动添加的内容 this.openToolStripButton.Click += new System.EventHandler(this.OpenFile);

System.EventHandler() 通用型 ,如EventArgs



c#子窗体与父窗体相互控制

 引自:https://www.cnblogs.com/giserpan/p/6906624.html

 

在word软件中,常常会使用查找功能,当点击查找时查找界面不会消失,但是会在文档中查找到需要的内容。在设置字体大小或者是颜色的时候会有个应用按钮或者是预览按钮,这个时候会对文档的内容进行修改但是不会关闭窗口,这两种情形就是子窗体控制父窗体的两种形式,怎样去解决这种问题呢,这里采用的是事件的相互订阅。

1、新建工程,创建两个窗体,form1和form2

c#子窗体与父窗体相互控制_第1张图片c#子窗体与父窗体相互控制_第2张图片

2.显示子窗体的代码如下:

 

1
2
3
4
5
private  void  button1_Click( object  sender, EventArgs e)
{
     Form2 frm =  new  Form2( this ); //传递窗体1指针
     frm.Show( this ); //窗体不会置于父窗体的外边
}

  窗体2构造函数添加参数

1
2
3
4
public  Form2(Form1 frm) //传递窗体1,为绑定窗体1的事件做准备
{
     InitializeComponent();
}

3.父窗体定义事件,子窗体订阅事件

1
父窗体定义事件,修改子窗体
1
2

     
public  delegate  void  changetxt( string  text);
  public  event  changetxt changetxt_event;  

子窗体订阅

1
2
3
4
5
6
7
8
9
10
public  Form2(Form1 frm)
{
     InitializeComponent();
     frm.changetxt_event +=  new  Form1.changetxt(frm_changetxt_event);
}
 
void  frm_changetxt_event( string  text)
{
     textBox1.Text = text;
}  

4.子窗体定义事件,父窗体订阅事件

子窗体定义事件

1
2
public  delegate  void  changetext( string  text);
public  event  changetext changetext_event;

父窗体订阅事件

1
2
3
4
5
6
7
8
9
10
11
private  void  button1_Click( object  sender, EventArgs e)
{
     Form2 frm =  new  Form2( this );
     frm.changetext_event +=  new  Form2.changetext(frm_changetext_event);
     frm.Show( this );
}
 
void  frm_changetext_event( string  text)
{
     textBox1.Text = text;
}

5.相互触发事件实现窗体通信

1
2
3
4
private  void  button1_Click( object  sender, EventArgs e)
{
     changetext_event(textBox1.Text);
}

6.最终效果

c#子窗体与父窗体相互控制_第3张图片

c#子窗体与父窗体相互控制_第4张图片

 

7.代码截图


YY:对比一下系统自动添加的内容 this.openToolStripButton.Click += new System.EventHandler(this.OpenFile);

System.EventHandler() 通用型 ,如EventArgs


 form1.cs

c#子窗体与父窗体相互控制_第5张图片

form2.cs

c#子窗体与父窗体相互控制_第6张图片

 

你可能感兴趣的:(c#开发)