如何使用双显示器应用程序解决此焦点问题?

ama*_*int 2 .net c# windows multiple-monitors winforms

我们有一个使用双显示器设置的应用程序 - 用户A将与监视器1一起使用,用户B将同时使用监视器2.监视器2是触摸屏设备.

现在,问题是,当用户A在他的屏幕中输入内容时,如果用户B尝试做某事,用户A将最终失去他窗口的焦点,这是灾难性的.

即使用户B对Monitor 2执行某些操作,在Monitor 1中保持对窗口的关注可能是一个很好的解决方案?

Han*_*ant 5

一些弯头油脂是可能的.将此代码粘贴到您在触摸屏上显示的表单中:

protected override CreateParams CreateParams {
  get {
    const int WS_EX_NOACTIVATE = 0x08000000;
    CreateParams param = base.CreateParams;
    param.ExStyle |= WS_EX_NOACTIVATE;
    return param;
  }
}
Run Code Online (Sandbox Code Playgroud)

这确保了表单不会从主表单中窃取焦点.看起来像这样:

  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
      Thread t = new Thread(SecondMonitor);
      t.IsBackground = true;
      t.SetApartmentState(ApartmentState.STA);
      t.Start();
    }
    private void SecondMonitor() {
      Form2 f2 = new Form2();
      f2.StartPosition = FormStartPosition.Manual;
      f2.Left = 800;   // Use Screen class here...
      f2.ShowDialog();
    }
Run Code Online (Sandbox Code Playgroud)