У меня странное поведение в форме MDI, когда клавиша ввода нажата в одной из форм при сфокусированном текстовом поле.MDI .NET Forms Введите ключевое событие, отправленное в другую форму
В принципе, родительская форма каким-то образом отправляет ключ в другую дочернюю форму MDI вместо отправки ее в форму, где TextBox, в котором была нажата клавиша ввода.
Для отладки я установил KeyPreview в true для каждой формы (родительский и 2 ребенка) и начал прослушивать четыре ключевых события (Preview, Up, Down, Press), и поведение этого отличается от того, нормальный ключ нажат, и если ввод находится в проблемных текстовых блоках.
C1 < - MDI Ребенок с TextBox; C2 < - Другой ребенок MDI; P < - MDI Parent
Если какая-либо другая клавиша нажата: C1.KeyDown -> P.KeyDown -> C1.KeyPress -> P.KeyPress -> C1.KeyUp -> P.KeyUp В результате, текст появляется в текстовом поле C1, где он должен быть.
Если ввод нажат: C2.KeyUp -> P.KeyUp В результате C2 фокусируется.
ПОЧЕМУ?!?!?!?!?!? : P
Как отчаянная попытка, я перепробовал ProcessCmdKey в каждой форме, чтобы узнать, что происходит, но нажатие клавиши ввода даже не проходит мимо.
Я не знаю, если это важно, но это код, который я использовал создать экземпляр формы C2 (который сделан до того С1) и код С1 создания экземпляра ...
Примечание: C1 форма инстанциирован и показаны в родительской форме как ответ на пользовательское событие, запущенной форме C2 ...
С2:
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;
}
С1:
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;
}
- это ваше текстовое поле многострочное ... –
У меня есть несколько текстовых полей (один из них - MultiLine), и все они представляют одну и ту же проблему. Я действительно хочу захватить событие ввода ключа ... – Scudelari
Кроме того, проблема в том, что ключ задан в ключевом представлении другой форме ... – Scudelari