텍스트 상자에 포커스가있을 때 입력 키를 누르면 양식에서 Enter 키를 누를 때 이상한 동작이 나타납니다.MDI .NET 양식 다른 양식으로 보내지는 키 이벤트 입력
기본적으로 부모 폼은 입력 키가 눌려진 TextBox가있는 폼으로 보내기 대신 기본적으로 다른 자식 MDI 폼으로 키를 보냅니다.
디버그하려면 KeyPreview를 모든 양식 (상위 및 하위 2 개)에서 true로 설정하고 네 개의 주요 이벤트 (미리보기, 위, 아래, 누르기)를 듣기 시작했습니다. 정상적인 키를 누르고 문제가있는 텍스트 상자에 입력 한 경우
C1 < - TextBox가있는 MDI 하위. C2 < - 기타 MDI 자식; P < - 다른 키를 누르면 MDI 부모
: -> P.KeyDown -> C1.KeyPress -> P.KeyPress -> C1.KeyUp - C1.KeyDown 결과> P.KeyUp , 텍스트는 C1의 TextBox에 나타납니다.
누를 때 입력하면 : C22.KeyUp -> P.KeyUp 결과적으로 C2는 초점이 맞춰집니다.
왜?!?!?!?!?! : P
절망적 인 시도로, 모든 양식에서 ProcessCmdKey를 무시하고 어떤 일이 일어나는지 발견하지만 Enter 키를 눌러도 거기서지나 가지 않습니다.
이 중요한 경우 나도 몰라,하지만 내가 (C1 전에 만든 됨) C2의 형태와 C1을 실체화하는 코드를 실체화하는 데 사용되는 코드입니다 ...
참고 : C1 양식
C2 ... 통해 인스턴스 및 C2 형태로 소성 커스텀 이벤트에 대한 응답으로 부모 형태로 나타낸다 :
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;
}
C1 :
,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 ... –
두 개 이상의 TextBoxes (둘 중 하나는 MultiLine)가 있으며 모두 동일한 문제를 나타냅니다. 나는 정말로 Enter 키 이벤트를 캡처하고 싶다 ... – Scudelari
게다가, 문제는 키가 다른 폼의 keypreview에서 제공된다는 것입니다 ... – Scudelari