C# MDI.NET表单输入发送到其他表单的密钥事件

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的文本框中,它应该位于该文本框中 如果按下

我在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:


这个问题真的很严重。该应用程序非常复杂,因为表单加载在不同的应用程序域中,并且它使用一个自定义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;
    }