나는 내가 원하는 tabControl 및 일부 컨트롤이있는 응용 프로그램을 만들고 있습니다. 그래서 기본적으로 컨트롤과 텍스트 상자를 만드는 함수가 있습니다. 코드는 다음과 같습니다 :텍스트 상자 타이핑 UI Winforms C#
TextBox message_box = new TextBox();
message_box.Size = new Size(790, 38);
message_box.Location = new Point(9, 7);
message_box.Font = new Font("Microsoft Sans Serif", 20);
message_box.KeyDown += Message_box_KeyDown;
message_box.Enter += Message_box_Enter;
bottom_panel.Controls.Add(message_box);
또한 다른 컨트롤을 추가했지만이 특정 컨트롤은 문제가 있습니다. 왜냐하면 내가이 컨트롤을 탭 페이지에 추가 한 다음 tabcontrol에 tab page를 추가하기 때문에 이상한 일이 발생하기 때문입니다.
추가 된 tabPage의 모든 단일 컨트롤이 지연없이 작동합니다. 하지만 textBox를 입력하면 막대한 지연이 발생하고 정지합니다. 이 또한 tabControl뿐만 아니라 디자이너 만든 된 페이지에 텍스트 상자를 추가하는 경우 발생합니다.
private async void Message_box_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Enter)
{
string name = "";
this.Invoke(new MethodInvoker(delegate { name = tabControl1.SelectedTab.Name; }));
TextBox box = new TextBox();
this.Invoke(new MethodInvoker(delegate { box = (TextBox)sender; }));
if (box.Text.Length > 0)
{
uiControls.ListItem melding = await Task.Factory.StartNew(() => sendMelding(name, box.Text));
box.Clear();
}
}
}
내가 뭘 잘못 알고하지 않으며, 지체 막을 수있는 텍스트 상자를 만드는 방법 :
이
가 트리거되고있는 이벤트입니다. 나는 invokation이 필요한지 확인하기 위해 tryed했다. 나는 invokation을 tryed했다. 나는 또한 형태로 CreateParams을을 owerwriting,이 코드를 사용했습니다 : 내가 쓰기protected override CreateParams CreateParams
{
get
{
// add the drop shadow flag for automatically drawing
// a drop shadow around the form
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
cp.ClassStyle |= CS_DROPSHADOW;
return cp;
}
}
이 명확하게하기 위해,에서 KeyDown 기능은 성능에 타격이 없습니다의에서 KeyDown 함수 내 코드가 발사되지 않습니다 때마다, 유일한 내가 진입했을 때 해고됐다. 그러나 일반적으로 텍스트 상자에 약 2-3자를 쓰면 지연이 나타나기 시작하고 프로그램이 멈추고 이벤트가 제거됩니다.
'sendMelding'의 기능은 무엇입니까? 당신의 텍스트 박스에 데이터가있을 때마다'sendMelding' 메소드를 호출 할 필요가 있습니까? –
Enter 키를 누르거나 모든 키를 누를 때만 입력이 지연됩니까? – krillgar
** KeyDown 이벤트를 ** 실행하지 않아도 지연이 있습니까? – Vikhram