我需要打开通知表单,而不会在出现时给予关注。 It works fine using P/Invoke除了已显示事件未启动的事实。 我的解决方案在这里,但是更优雅(更通用)吗?
Public Shared Sub ShowInactiveTopmost(frm As Form)
'standard P/Invoke code
ShowWindow(frm.Handle, SW_SHOWNOACTIVATE)
SetWindowPos(frm.Handle.ToInt32(), HWND_TOPMOST,
frm.Left, frm.Top, frm.Width, frm.Height, SWP_NOACTIVATE)
'invocation of 'Shown' event - can this be made independent of 'NotifForm' type?
CType(frm, NotifForm).NotifForm_Shown(Nothing, New EventArgs())
End Sub
我尝试了使用RaiseEvent Shown()
的更通用的方法,但它抛出了错误Derived classes cannot raise base class events.
答案 0 :(得分:0)
汉斯'评论我发现,即使没有P / Invoke,表单也可以显示为无焦点,使用标准Show()
添加ShowWithoutActivation
属性覆盖,如MSDN description of ShowWithoutActivation property中所述。
然后显示的事件按预期工作。
'use this with standard form.Show() instead of P/Invoke stuff
Protected Overrides ReadOnly Property ShowWithoutActivation As Boolean
Get
Return True
End Get
End Property