我做了两个窗体,父窗体中设置了一个KeyUp事件响应函数,只希望它对父窗体激活时的键盘操作作出响应,但是现在发现子窗体激活时,键盘事件被父窗体捕获了,这是我不希望发生的。具体的代码如下:父窗体的键盘响应:
public class MainForm:Form
{
private void Keyup_Callback(object sender, KeyupEventArgs e)
{
if(e.Keycode == Keys.Enter)
//do something
}
}父窗体打开子窗体的方式:
//父窗体调用
SubForm.Show();
//子窗体代码
public class SubForm:Form
{
public DialogResult result = DialogResult.None; public static DialogResult Show()
{
subForm = new subForm();
subForm.Showdialog(); // Showdialog阻塞期间,用户点击SubForm上的确定按钮,事件响应见btnCommit响应函数
return this.result;
} private void btnCommint_Callback(object sender, EventArgs e)
{
this.Close();
this.result = DialogResult.OK;
}
}
状况出现在父窗体用SubForm.Show()打开子窗体后,用Tab键将焦点移动到子窗体的确定按钮上,一敲回车,子窗体的btnCommit_Callback被执行,同时父窗体中的Keyup_Callback也被执行!尝试了很多方法,如果我用C#的MessageBox代替SubForm显示对话框消息,当我按下Enter键时,Keyup_Callback也一样被执行,头疼。
public class MainForm:Form
{
private void Keyup_Callback(object sender, KeyupEventArgs e)
{
if(e.Keycode == Keys.Enter)
//do something
}
}父窗体打开子窗体的方式:
//父窗体调用
SubForm.Show();
//子窗体代码
public class SubForm:Form
{
public DialogResult result = DialogResult.None; public static DialogResult Show()
{
subForm = new subForm();
subForm.Showdialog(); // Showdialog阻塞期间,用户点击SubForm上的确定按钮,事件响应见btnCommit响应函数
return this.result;
} private void btnCommint_Callback(object sender, EventArgs e)
{
this.Close();
this.result = DialogResult.OK;
}
}
状况出现在父窗体用SubForm.Show()打开子窗体后,用Tab键将焦点移动到子窗体的确定按钮上,一敲回车,子窗体的btnCommit_Callback被执行,同时父窗体中的Keyup_Callback也被执行!尝试了很多方法,如果我用C#的MessageBox代替SubForm显示对话框消息,当我按下Enter键时,Keyup_Callback也一样被执行,头疼。
解决方案 »
- 基础问题!是这样的吧?
- HttpWebRequest
- Socket BeginReceive 异步接收问题。代码相当短,请进来看看。
- 求助,白荷请进
- asp.net 格式化列
- C#中如何批量修给DataGridView中的数据
- 质疑vs2005编译出一空窗体程序,运行后察看任务管理器,竟然占用30M内存左右.最小化又恢复只占2M多,请问这是怎么回事?
- 为何textBox无法显示字符串"\0\00\0P\0`\n\0€\t"?
- msgpack序列化的问题
- 关于Visual C#对文本文件的操作,在线等待。
- WPF,这个对齐方式为什么不听使唤
- 使用控件,dataGridView,如何使整个表格填满控件?求助
不知道“子窗体和父窗体上的控件的消息都要被父窗体先接收再传给他们,按下Enter键时自然就都执行了”这是什么平台。微软的么?
谁知道你的 Keyup_Callback 在什么地方使用过?你贴得出来使用它来注册别的事件的所有相关代码吗?你私藏了这么多代码,又可以写错了那么多代码,这怎么问问题呢?如果你觉得自己的代码很值钱,不想写出来,那么你可以写一个只有10~20行的例子来。但是最起码地要符合语法,可以编译通过。