C# MDI.NET表单输入发送到其他表单的密钥事件
我在MDI表单中有一个奇怪的行为,当文本框被聚焦时,在其中一个表单中按下enter键 基本上,父窗体以某种方式将键发送到另一个子MDI窗体,而不是发送到按下enter键的文本框所在的窗体 为了调试,我在父母和两个孩子的每个表单上都将KeyPreview设置为true,并开始收听四个按键事件Preview、Up、Down、Press,如果按下普通键,如果有问题的文本框中有enter,则其行为会有所不同 C1按键->C1按键->p按键 结果,该文本出现在C1的文本框中,它应该位于该文本框中 如果按下回车键: C2.KeyUp->P.KeyUp 因此,指挥与控制系统是集中的 为什么P 作为一种不顾一切的尝试,我在每个表单中都覆盖了ProcessCmdKey,以发现发生了什么,但回车键甚至没有经过那里 我不知道这是否重要,但这是我用来实例化C1之前制作的C2表单的代码和实例化C1的代码 注意:C1表单由父表单实例化并显示为对C2表单触发的自定义事件的响应 C2: C1:C# MDI.NET表单输入发送到其他表单的密钥事件,c#,.net,winforms,mdi,C#,.net,Winforms,Mdi,我在MDI表单中有一个奇怪的行为,当文本框被聚焦时,在其中一个表单中按下enter键 基本上,父窗体以某种方式将键发送到另一个子MDI窗体,而不是发送到按下enter键的文本框所在的窗体 为了调试,我在父母和两个孩子的每个表单上都将KeyPreview设置为true,并开始收听四个按键事件Preview、Up、Down、Press,如果按下普通键,如果有问题的文本框中有enter,则其行为会有所不同 C1按键->C1按键->p按键 结果,该文本出现在C1的文本框中,它应该位于该文本框中 如果按下
这个问题真的很严重。该应用程序非常复杂,因为表单加载在不同的应用程序域中,并且它使用一个自定义DLL来执行与数据库的异步连接,并处理表单中的一些事情
不管怎样,第二种形式是一种对话框,我希望它浮动在MDI形式之上。但是现在,这个对话框窗体被设置为不再使用MDI,因此成为一个完全分离的窗体。这样,它就可以工作了。…你的文本框是多行的……我有多个文本框,其中一个是多行的,它们都出现了相同的问题。我真的很想捕获enter key事件…此外,问题是,key在keypreview中被提供给了另一个表单…有人吗?请,我真的需要这个…创建一个展示这种行为的小项目,并将其发布到文件共享服务或粘贴站。我不太清楚您是否仍在寻找解决此问题的方法。如果您对解决方案感到满意,我就不必费心调试代码和解释行为。如果你在意的话,发布一个像Hans提到的复制项目会非常有帮助。很明显,repo项目需要包含当前项目中使用的任何基表单类。但是我怀疑如果你想要一个对话框,你应该使用ShowDialog方法来显示表单。
private void CalendarForm_Load(object sender, EventArgs e)
{
// Loop through all of the form's controls looking
// for the control of type MdiClient.
foreach (Control ctl in this.Controls)
{
if (ctl is MdiClient)
{
// Set the BackColor of the MdiClient control.
((MdiClient)ctl).BackColor = this.BackColor;
}
}
// Shows the background form
this._calendarContents.MdiParent = this;
this._calendarContents.Show();
//this._calendarContents.Dock = DockStyle.Fill;
}
private FloatingEventDetails _floatingEvent = null;
private void _calendarContents_ElementDoubleClicked(object sender, ElementDoubleClickedEventArgs e)
{
// Checks if the form is not open
if (this._floatingEvent == null)
{
// Opens the form
this._floatingEvent = new FloatingEventDetails();
this._floatingEvent.ModuleForm = this;
this._floatingEvent.ListOfImages = this.ElementTypeImageList;
this._floatingEvent.MdiParent = this;
// Begins to listen for Focus and LostFocus events
this._floatingEvent.GotFocus += new EventHandler(_floatingEvent_GotFocus);
this._floatingEvent.LostFocus += new EventHandler(_floatingEvent_LostFocus);
}
// Displays the form
this._floatingEvent.Show();
this._floatingEvent.BringToFront();
this._floatingEvent.Focus();
// Loads the Event in the details form
this._floatingEvent.EventId = e.EventId;
}