当前位置: 首页 > 编程语言 > C#

关于如何将无模式消息框显示为工具提示的想法分享

时间:2023-04-10 21:03:32 C#

C#学习教程:关于如何将无模式消息框显示为工具提示的想法我不能使用messagebox.show(...)因为它是模态的。所以我所做的是创建一个单独的表单并使用菜单项上的悬停事件显示该表单。我有两个问题:1)显示表单时,菜单失去可见性。2)表单表单没有出现在菜单项旁边,就像工具提示一样。关于如何保留组件的工具提示以使其看起来和行为像表单的任何想法?回答第二个问题:如果将form.StartPosition属性设置为FormStartPosition.Manual,则可以将表单放在光标处(例如):form.StartPosition=FormStartPosition.Manual;form.Location=newPoint(Cursor.Position.X-1,Cursor.Position.Y-1);这也可能有助于解决您的第一个问题。如果你想让你的表单表现得像一个工具提示,如果你添加以下事件处理程序代码,它可能会做你想做的事情:标签if(Cursor.Position.XLocation.X+Width-1||Cursor.Position.Y>Location.Y+Height-1){Close();}}这解释了-1。它确保光标在第一次显示时实际上在窗体上。由于Form类只是本机窗口的包装器,您可以使用以下代码片段创建您自己的弹出式表单,它几乎看起来像一个工具提示窗口:publicclassPopupForm:Form{privateconstintSWP_NOSIZE=0x0001;私人常量intSWP_NOMOVE=0x0002;私人常量intSWP_NOACTIVATE=0x0010;privateconstintWS_POPUP=unchecked((int)0x80000000);私人常量WS_BORDER=0x00800000;私有常量intWS_EX_TOPMOST=0x00000008;私有常量WS_EX_NOACTIVATE=0x08000000;私有constintCS_DROPSHADOW=0x00020000;privatestaticreadonlyIntPtrHWND_TOPMOST=(IntPtr)(-1);[DllImport("user32.dll")][返回:MarshalAs(UnmanagedType.Bool)]privatestaticexternboolSetWindowPos(IntPtrhWnd,hWndInsertAfter,intX,intY,intcx,intcy,uintuFlags);publicPopupForm(){InitializeComponent();SetStyle(ControlStyles.Selectable,false);可见=假;}protectedvirtualvoidInitializeComponent(){FormBorderStyle=FormBorderStyle.None;StartPosition=FormStartPosition.Manual;ShowInTaskbar=false;BackColor=SystemColors.Info;//...}protectedoverrideCreateParamsCreateParams{get{CreateParamscp=base.CreateParams;cp.Style|=WS_POPUP;cp.Style|=WS_BORDER;/if(Microsoft.OS.IsWinXP&&SystemInformation.IsDropShadowEnabled)//cp.ClassStyle|=CS_DROPSHADOW;返回cp;}}protectedoverrideboolShowWithoutActivation{get{returntrue;HWND_TOPMOST、0、0、0、0、SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE);base.Show();}publicvoidShow(Pointp){Location=p;展示();}}使用外部代码的Show()和Hide()方法来控制这个窗体以上是C#学习教程:关于如何将无模式消息框显示为工具提示的思路分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢