我有一个模态表单,当用户单击它外部时,我想关闭它(表单试图模仿组合框下拉区域的行为)。
我可以这样说:
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);
}