窗体之间的对象如何相互引用或操作
第二个要说的是窗体之间的对象如何相互引用或者操作。
常见的类似问题有:
1. 如何在子窗体访问到主窗体中的某某数据;
2. 如何在子窗体中调用主窗体中的某某方法;
3. 如何在子窗体关闭的时候去更新主窗体的某某数据。
对于如上的三个问题,完全可以由如下两种方法来完成:
1. 当数据是子窗体显示的必要条件的话,通过修改子窗体的构造函数来进行传递数据;
2. 如果是不定时的访问,则可以通过委托来实现。
对于第一点,我就不多说了,对于第二点,我用如下的例子来说明。
首先在子窗体中,需要如下:
//在主窗体中定义两个delegate分别用于设置或者获取主窗体中文本框的值
public delegate void SetTextValue( string TextValue );
public delegate string GetTextValue( );
// 在子窗体中
// Handler for methods from main form
private SetTextValue SetText = null;
private GetTextValue GetText = null;
// 通过如下所示来调用方法
string strValue = GetText();
SetText( strValue + DateTime.Now.ToString() );
除了如上一些操作外,还需要修改子窗体的构造函数,来接收这两个delegate方法,这里就不多说了。
至于主窗体,首先要为这两个委托来实现对应函数,例如:
/// <summary>
/// 从其它窗体获取文本值
/// </summary>
/// <returns> </returns>
private string GetValue()
{
return yourTextBox.Text;
}
/// <summary>
///设置其它窗体的文本值
/// </summary>
/// <param name="sValue"> </param>
private void SetValue( string sValue )
{
yourTextBox.Text = sValue;
}
那么调用子窗体的时候就比较简单了。
//创建子窗体并且显示
yourSubForm myForm = new yourSubForm(
new SetTextValue( SetValue ),
new GetTextValue( GetValue ) );
myForm.ShowDialog();
这样一个通过委托来操纵主窗体的例子就完成了。这里需要注意的一点,如果在子窗体中大量使用到主窗体的数据的话,那我建议你重新考虑窗体架构,这意味着你目前的窗体架构不合理。