Ich mache eine Anwendung, wo ich ein TabControl und einige Steuerelemente, die ich erstellen möchte. Also habe ich eine Funktion, die im Grunde Kontrollen und eine Textbox macht. Der Code sieht so aus:Textfeld Eingabe hängt die Benutzeroberfläche in 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);
Ich habe auch einige andere Steuerelemente hinzugefügt, aber diese spezielle Steuerung ist diejenige, mit der ich Probleme habe. Weil, wenn ich diese Steuerelemente der Registerkarte hinzufüge, und dann ich die Registerkarte der Tabsteuerung hinzufüge, geschieht etwas Merkwürdiges.
Jedes einzelne Steuerelement in der hinzugefügten Registerkarte funktioniert einwandfrei und ohne Verzögerung. Aber wenn ich die TextBox eintippe, bekomme ich massive Verzögerung und es friert ein. Dies passiert auch, wenn ich der Designer-Seite im TabControl auch ein Textfeld hinzufüge.
Dies ist das Ereignis, das ausgelöst wird:
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();
}
}
}
Ich weiß nicht, was falsch ist, ich tue und wie die Textbox machen hinken zu stoppen. Ich habe versucht zu prüfen, ob es Aufrufen benötigt, ich habe versucht, Anrufung. Ich habe auch diesen Code verwendet, die CreateParams in Form 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;
}
}
Um klar zu sein, die KeyDown Funktion keinen Treffer auf die Leistung hat, wird der Code innerhalb der KeyDown- Funktion nicht gefeuert jedes Mal wenn ich schreibe, seine einzige gefeuert, wenn ich Enter drücke. aber normalerweise, wenn ich über 2-3 Zeichen in das Textfeld schreibe, erscheint das lagg und das Programm friert ein, wenn ich die Ereignisse entferne, geschieht es auch.
Welche Funktion hat 'sendMelding'? es ist notwendig, 'sendMelding' Methode jedes Mal aufzurufen, wenn Ihr Textfeld Daten enthält? –
Schlägt die Eingabe nur nach, wenn Sie die Eingabetaste oder bei jedem Tastendruck drücken? – krillgar
Haben Sie die Verzögerung, auch wenn Sie das KeyDown-Ereignis ** nicht ** aufrufen? – Vikhram