在Excel工作簿的顶部创建一个Windows窗体,但键盘输入仍然进入Excel

时间:2015-04-08 12:44:32

标签: vb.net excel vsto

当用户点击Excel中的某个单元格时,我会创建一个新的Windows窗体。然后我使用以下命令将表单放在最上面。

FormName.TopMost = True
FormName.TopMost = False

当我这样做时,Windows窗体会从Excel应用程序中窃取键盘输入焦点。我仍然希望键盘输入进入Excel应用程序。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

尝试将表单ShowModal属性设置为False。这将允许表单浮动,但允许您选择下面的单元格等。

答案 1 :(得分:0)

试试这个(C#,但你可以轻松翻译): (TOOLWINDOW只是为了好玩。)

        Form f = new Form2();
        f.StartPosition = FormStartPosition.Manual;
        f.Location = new Point(x, y);
        f.Show(new SimpleWindow { Handle = (IntPtr) excelApp.Hwnd } );

   class SimpleWindow : IWin32Window {
       public IntPtr Handle { get; set; }
   }

   public class Form2 : Form {
       private const int WS_EX_TOOLWINDOW = 0x00000080;
       protected override CreateParams CreateParams {
           get {
               var cp = base.CreateParams;
               cp.ExStyle = WS_EX_TOOLWINDOW;
               return cp;
           }
       }
       protected override bool ShowWithoutActivation {
           get {
               return true;
           }
       }
   }