控件是一个组合控件
控件包含以下控件:
TextBox
Form
form 中包含 DataGrid 功能说明: TextBox 用于给用户录入关键字,当按向下键时Form.DataGrid获得焦点.
Form是在当TextBox发生TextChange时显示.
DataGrid根据关键字检索数据记录并显示.当在DataGrid按非功能键时(向上,向下,向左,向右,回车)
TextBox便获得焦点,并得到相应按键信息. 问题:
当DataGrid获得焦点时,如何让在datagrid上的按键消息传递给TextBox控件.
控件包含以下控件:
TextBox
Form
form 中包含 DataGrid 功能说明: TextBox 用于给用户录入关键字,当按向下键时Form.DataGrid获得焦点.
Form是在当TextBox发生TextChange时显示.
DataGrid根据关键字检索数据记录并显示.当在DataGrid按非功能键时(向上,向下,向左,向右,回车)
TextBox便获得焦点,并得到相应按键信息. 问题:
当DataGrid获得焦点时,如何让在datagrid上的按键消息传递给TextBox控件.
首先声明一个接口IMessage,该接口有一个方法SendMessage,接口定义如下:
public interface IMessage {
void SendMessage(string s);
}
该接口应该由Parent窗体实现,实现代码如下:
public class frmParent : System.Windows.Forms.Form,IMessage{
//... 其他代码省略
public void SendMessage(string s) {
this.textBox2.Text = s;
}
}子窗体则在OnChanged的时候调用这个接口方法,代码如下:
private void textBox1_TextChanged(object sender, System.EventArgs e) {
MyMessage.SendMessage(this.textBox1.Text);//这里调用的是接口方法
}这里的MyMessage是一个IMessage接口的引用,这个引用我们在父窗体的InitializeComponent时候设置即可,代码如下:
child.MyMessage = this;//this实现了IMessage当然子窗口需要保持接口的引用,代码如下:
public class frmChild : System.Windows.Forms.Form{
//... 其他代码省略
public IMessage MyMessage;
}这些代码实现的效果和利用委托实现的效果相同。你可以对比这参考一下哪个更合适你。接口实现的效率要比委托的高一些。