私が作成したいタブコントロールといくつかのコントロールを持つアプリケーションを作成しています。だから私は基本的にコントロールとテキストボックスを作る関数を持っています。コードは次のようになります:テキストボックスの入力によってWinformsのUIがハングする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にタブページを追加して、何か変わったことが起こるからです。
追加されたtabPage内のすべてのコントロールは、うまく機能しており、遅延もありません。しかし、私がテキストボックスに入力すると、私は大規模なラグを取得し、それはフリーズします。これは、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が必要かどうかをチェックしようとしました、私は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