在我的应用程序中,我试图聚焦一个文本框,这样我就可以在表单加载后直接输入。
当Form
显示时,我可以看到TextBox
中的光标 Flink ,但如果我键入一些内容,什么也不会发生。
我需要单击窗口开始在TextBox
中输入文本。如果我从Visual Studio正常运行我的应用程序,它将完美地工作,但如果我的应用程序使用任务计划程序运行,则会发生这种情况。
你有什么建议吗?
下面是我的代码:
this.TopMost = true;
textbox.Focus();
我也试过textbox.Select();
,但它不工作。
2条答案
按热度按时间tez616oj1#
问题是:当应用程序通过任务调度程序操作运行时,主窗口显示为非活动状态,系统通知用户在任务栏中 Flink 应用程序的图标。这是 * 设计 。
一个简单的解决方法是在窗体设计器中设置启动窗口的
WindowState
=
FormWindowState.Minimized
,然后在窗口完成加载其内容并准备好显示后将其重新设置为*FormWindowState.Normal
,从而引发Shown事件。设置
FormWindowState.Normal
会导致调用ShowWindow,其中nCmdShow
设置为SW_SHOWNORMAL
**:窗口现在照常显示,处于活动状态并准备接收输入。
此外,代码使用ActiveControl属性显式设置应接收输入的Control。
我建议将
Shown
处理程序设置为async
,并在重新设置WindowState
属性之前添加一个小延迟,以防止任务栏图标陷入 Flink 状态。如果窗口需要重新定位或调整大小,则需要在重置
WindowState
后进行,因为在此之前窗口处于最小化状态,不会缓存位置和大小值。表单的StartPosition应设置为FormStartPosition.Manual
pcrecxhr2#
我的解决方案基于Jimi答案,但使用Windows API时,无需在窗体设计器中设置Form
WindowState
属性。用途