相关疑难解决方法(0)

在没有窃取焦点的情况下显示表单?

我正在使用表单来显示通知(它出现在屏幕的右下角),但是当我显示此表单时,它会从主表单中窃取焦点.有没有办法在不窃取焦点的情况下显示此"通知"表单?

.net c# winforms

135
推荐指数
7
解决办法
7万
查看次数

如何在Delphi中模拟下拉表单?

如何使用Delphi 创建"下拉"窗口?

超越这一点的一切都是研究工作; 并且与答案无关.

研究工作

做一个适当的下拉需要很多部分仔细一起工作.我假设人们不喜欢这个棘手的问题,我宁愿问七个不同的问题; 每一个都解决了一小部分问题.接下来的一切都是我为解决这个看似简单的问题所做的研究工作.


请注意下拉窗口的定义特征:

在此输入图像描述

  • 1.下拉延伸到它的"所有者"窗口之外
  • 2."拥有者"窗口保持焦点; 下拉永远不会抢断焦点
  • 3.下拉窗口有一个阴影

这是我在WinForms中询问的同一问题的Delphi变体:

WinForms的答案是使用ToolStripDropDown class.它是一个帮助类,可以将任何形式转换为下拉列表.

让我们在Delphi中做到这一点

我将首先创建一个华而不实的下拉表单,作为示例:

在此输入图像描述

接下来我将删除一个按钮,这将是我点击以显示下拉列表的内容:

在此输入图像描述

最后,我将连接一些初始代码,以显示它在OnClick中需要的形式:

procedure TForm3.Button1MouseDown(Sender: TObject; 
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
    frmPopup: TfrmPopup;
    pt: TPoint;
begin
    frmPopup := TfrmPopup.Create(Self);

    //Show the form just under, and right aligned, to this button
    pt := Self.ClientToScreen(Button1.BoundsRect.BottomRight);
    Dec(pt.X, frmPopup.ClientWidth);

    frmPopup.Show(Self, Self.Handle, pt);
end;
Run Code Online (Sandbox Code Playgroud)

编辑:将其更改为MouseDown而不是Click.单击不正确,因为显示下拉列表而无需单击.其中一个未解决的问题是如果用户再次按下按钮,如何 …

windows delphi shell drop-down-menu delphi-xe6

18
推荐指数
2
解决办法
4622
查看次数

如何创建一个悬停的C#Winforms控件

如何创建超出其区域范围的C#Winforms控件?比如一个下拉框.有点像你在小尺寸面板中有一个DropDownBox.

.net c# user-interface user-controls winforms

9
推荐指数
2
解决办法
4848
查看次数

组合框在显示列表项时如何拦截鼠标事件到表单上的任何位置来隐藏列表?

我正在尝试使用类似于组合框的功能实现.net表单控件,但我不知道在表单上的任何位置拦截鼠标事件以取消扩展项目列表的正确方法.

在显示列表时,如何防止其他控件响应鼠标事件?

如何高效安全地将鼠标单击事件捕获到表单上的任何位置,以隐藏扩展列表?

.net events combobox winforms

8
推荐指数
1
解决办法
729
查看次数

ComboBox在下拉时如何捕获鼠标?

我试图模拟ComboBox下拉列表的行为(或其他下拉菜单的行为,包括上下文菜单),当您点击其他任何地方时,下拉关闭,即使在无法聚焦的事情上也是如此.

我已经尝试订阅MouseCaptureChanged,LostFocus和Leave等事件.我有一个自定义UserControl作为下拉列表,我只想在用户点击其他任何地方时关闭它.

这似乎是在许多控件中完成的事情,所以如果没有一个简单的方法,我会感到惊讶.

到目前为止,我可以提出的过于复杂的方法是使用pinvoke和SetCapture()函数,或者创建一个MessageFilter.如果这些是唯一的选择,我不确定哪个更好.

.net c# mouse combobox capture

7
推荐指数
1
解决办法
2098
查看次数

如何在Winforms中创建一个"弹出"(提示,下拉,弹出)窗口?

我如何制作,我将称之为"WinForms中的"弹出窗口"?


由于我使用了自己的单词"popup",让我举一个这个所谓的"弹出窗口"窗口的例子:

  • 一个提示窗口(可在其母体形式的边界之外延伸,不会出现在任务栏,不是模态,并且不偷焦点):

    在此输入图像描述

  • 一个弹出菜单窗口(可以扩展到其父窗体的边界之外,不会出现在任务栏中,不是模态的,也不会偷取焦点):

    在此输入图像描述

  • 一个下拉窗口(可以在其父窗体的边界之外延伸,不会出现在任务栏中,不是模态的,也不会偷取焦点):

    在此输入图像描述

  • 主菜单窗口(可在其母体形式的边界之外延伸,不会出现在任务栏,不是模态,并且不偷焦点):

    在此输入图像描述

  • 更新一个弹出窗口,不会让自己的"活动"窗口时,使用鼠标或键盘交互("所有者"窗口保持活动窗口):

在此输入图像描述

我在这个神秘的"弹出窗口"中寻找的属性是:

  • 可以扩展到其父表单的边界之外(即不是子窗口)
  • 没有出现在任务栏中(即窗口应该出现的窗口的启发式没有启动,也没有WS_EX_APPWINDOW扩展窗口样式)
  • 不是模态的(即不禁用其"所有者")
  • 没有窃取焦点
  • 总是它的"所有者" 的顶部
  • 在与(所有者保持活跃)交互时不会成为"活动"窗口

Windows应用程序已经设法创建这样的窗口.我怎么能在WinForms应用程序中执行此操作?

相关问题

  • 我如何在本机代码中实现上述所有功能?
  • 如何在Delphi中创建弹出窗口?
  • 我有这个本机代码来显示一个"弹出窗口"窗口 - 在.NET中执行相同的操作需要什么P/Invokes?
  • 我在.NET中有一组P/Invoke - 我可以重用常规的WinForm,覆盖某些方法,以达到同样的效果吗?
  • 我有WinForm,我通过覆盖某些方法显示为"弹出窗口" - 是否有内置Control可以作为我的弹出窗口?
  • 如何模拟WinForms中的下拉窗口?

尝试#1

我试过这个Show(onwer) + ShowWithoutActivation方法:

PopupForm dd = new PopupForm ();
dd.Show(this);
Run Code Online (Sandbox Code Playgroud)

使用PopupForm:

public class PopupForm: Form
{
    public PopupForm() …
Run Code Online (Sandbox Code Playgroud)

winapi popup popupwindow winforms

6
推荐指数
1
解决办法
2795
查看次数