私は現在、MS Compact Framework 2.0 を搭載した Windows CE 5 デバイスで実行される C# アプリケーションに取り組んでいます。このアプリケーションでは、BeginInvoke を介して非同期にキーボード フックからシングルトン ダイアログを呼び出します。
this.BeginInvoke((ThreadStart)delegate()
{
DlgX.getInstance().display(TaskController.getInstance().getActiveTask().getValues(), true);
});
ダイアログの表示方法で特定のコントロールにフォーカスを合わせたい。Win CE デバイスは非常に遅いため、タイマーを使用して Focus() の実行を遅らせる必要があります。
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 600;
timer.Enabled = true;
timer.Tick += (EventHandler)delegate(object obj, EventArgs args)
{
button1.Focus();
timer.Dispose();
};
残念ながら、これは機能しません。ダイアログを閉じるとすぐにタイマーが実行されます。私は何を間違っていますか?
助けてくれてありがとう!
編集: これは、ダイアログの display() メソッド全体です:
public void display(List<InputRow> fvList, bool validate)
{
this.fvList = fvList;
ctlCount = (fvList.Count > 5 ? 5 : fvList.Count);
for (int i = 0; i < ctlCount; i++)
{
//some 100% irrelevant stuff
}
button1.KeyDown += new KeyEventHandler(btnOK_KeyDown);
button1.Click += new EventHandler(btnOK_Click);
if (!this.Visible)
{
ShowDialog();
}
if (validate)
{
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 600;
timer.Enabled = true;
timer.Tick += (EventHandler)delegate(object obj, EventArgs args)
{
button1.Focus();
timer.Dispose();
};
}
}