在 WinForms 中的模式窗体外部单击鼠标时停止声音



我有一个模态表单,当用户单击它外部时,我想关闭它(表单试图模仿组合框下拉区域的行为)。

我可以这样说:

protected override void WndProc(ref Message m)
{
    if (m.Msg == 0x86 && (int) m.WParam == 0)
        if (DialogResult == DialogResult.None)
            DialogResult = DialogResult.OK;
    base.WndProc(ref m);
}

我的问题是同时播放声音,我想停止它。

您使用了错误的工具来完成这项工作。您需要模仿下拉控件。那为什么不使用ToolStripDropDown呢?

如果你不知道,它就在这里。您可以使用 ToolStripControlHost 创建ToolStripDropDown并显示其中的任何自定义控件。

当用户单击外部时,它将自动关闭。您也可以通过调用 ToolStripDropDown.Close 手动关闭它

一个小例子将如下所示。

private void button1_Click(object sender, EventArgs e)
{
    ToolStripDropDown dropDown = new ToolStripDropDown();
    ListBox listBox = new ListBox();
    for (int i = 0; i < 10; i++)
    {
        listBox.Items.Add("Item " + i);
    }
    listBox.SelectedIndexChanged += (o, args) => dropDown.Close();
    dropDown.Items.Add(new ToolStripControlHost(listBox));
    dropDown.Show(MousePosition);
}

最新更新