如何在按下ALT+TAB时也能在窗体上强制设置焦点

本文关键字:窗体 设置 焦点 ALT+TAB | 更新日期: 2023-09-27 18:20:54

我正在实现一个程序,在该程序中,系统启动时应打开一个表单,用户应在一些表单字段中输入数据,然后只有用户才能访问系统中的信息。我把这个程序添加到任务调度程序中,这样程序就可以在系统启动时执行了。在系统启动时强制用户填写表单字段有什么帮助吗

如何在按下ALT+TAB时也能在窗体上强制设置焦点

您不能这样做。Windows不会允许这种情况发生。如果这是允许的,并且两个程序同时尝试这样做,就不知道它会对你的系统产生什么影响。

实际上你的问题还不清楚,最好提供更多关于你的场景的信息

但我会尽力提供一些信息。

1-您可以使用以下代码使应用程序在windows启动应用程序上运行

  RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE''Microsoft''Windows''CurrentVersion''Run", true));
            key.SetValue("My Program", "'"" + Application.ExecutablePath + "'"");

2-然后你可以通过使你的程序运行在最顶端

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace LicenseManager {
  public static class WinApi {
    [DllImport( "user32.dll" )]
    static extern bool SetWindowPos( IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags );
    static private IntPtr HWND_TOPMOST = new IntPtr( -1 );
    private const uint SWP_NOSIZE = 0x0001;
    private const uint SWP_NOMOVE = 0x0002;
    static public void MakeTopMost( Form f ) {
      SetWindowPos( f.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );
    }
  }
}

3-您可以通过在关闭事件中检查您的登录信息来阻止用户关闭应用程序,直到他输入所需的数据

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        DialogResult userAnswer = MessageBox.Show ("Do you wish to close ALL " + counterLabel.Text + " of the 'Form2' forms?", "Close ALL Forms?", 
            MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (userAnswer == DialogResult.Yes)
            this.Dispose();
    }