有一个主窗体:MainForm,上面有一个Name为btnShow的按钮和Name为lbInfo的Label控件,它的Text为“Hello”。单击btnShow就会弹出名为chdForm的子窗体ExercisePlan,且ExercisePlan以非模态对话框的形式弹出(即chdForm.Show()),子窗体上有n个TextBox控件个名分别为txtFlighPlanIndex和txtStartTime_FPL等等。我先让txtStartTime_FPL获取焦点,然后点击主窗体的lbInfo控件,此时lbInfo的Text就会赋值到txtStartTime_FPL中,我想通过计算机来自动判断我在子窗体中是哪个控件获取焦点,然后再决定将lbInfo的Text赋值给哪个控件?刚才的描述就是计算机知道txtStartTime_FPL获取焦点了,所以将lbInfo的Text就会赋值到txtStartTime_FPL中。下面的例子将以两个TextBox来实现如何在该TextBox获取焦点然后点击主窗体的lbInfo,此时TextBox失去焦点,同时lbInfo的Text值也赋值给该刚失去焦点的TextBox。
在子窗体中的代码:
/// <summary> /// 用于记录哪个TextBox失去了焦点,以便在点击主窗体的时候将获得的Text值赋给刚失去 /// 焦点的TextBox /// </summary> private Control ctrlLostFocus=null; public ExercisePlan(MainForm parent) { this.Owner=parent; InitializeComponent(); //注册事件处理函数 ((MainForm)this.Owner).lbInfo.Click+=lbInfo_Clicked; ((TextBox)this.txtFlighPlanIndex).LostFocus+=TextBox_LostFocus; ((TextBox)this.txtStartTime_FPL).LostFocus+=TextBox_LostFocus; }
/// <summary> /// 响应主窗体的lbInfo的Click事件,与子窗体的TextBox的LostFocus事件配合 /// 即在TextBox_LostFocus事件处理函数中获取刚失去焦点的TextBox并保存在ctrlLostFocus中,然后再在该 /// plbInfo_Clicked事件处理函数中获取刚失去焦点的TextBox——ctrlLostFocus并给它的Text赋值 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void lbInfo_Clicked(object sender,EventArgs e) { if (this.ctrlLostFocus!=null) { TextBox edit=ctrlLostFocus as TextBox; edit.Text=lbInfo.Text; this.ctrlLostFocus=null; } } /// <summary> /// 响应TextBox的LostFocus事件,将刚失去焦点的TextBox保存在ctrlLostFocus中,以便在lbInfo_Clicked事件处理函数中获取该控件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void TextBox_LostFocus(object sender, EventArgs e) { ctrlLostFocus=sender as Control; }
这样便能完成从主窗体获取信息并赋值给子窗体的控件,其它情况可以以该方法作为参考