c# - 将一个窗口放在另一个窗口前面

标签 c# winforms

我正在编写一个 UserControl,它的作用有点像下拉列表,基本上是一个文本框,下面会弹出一个列表框...

如果控件位于其父窗体的底部,我不希望列表框被窗体底部剪裁,所以据我所知,我不能只将此列表框作为父窗体的子项。我需要创建一个包含列表框的新无边框表单并将其显示在正确的位置。

我可以做到这一点,问题在于整理表格的 z 顺序。我需要这个新表单始终显示在父表单上方。但我不希望此窗口出现在父窗体上方的任何窗口上方...这是设置 form.TopMost 会给我的。

还有其他方法吗? ComboBox 如何实现这种行为?

谢谢

最佳答案

当您调用 form.Show() 时,将用户控件的所有者(当前窗体)作为所有者参数传入。这段代码并不完美,但您会明白的。

class MyControl : UserControl
{
    private DropDownForm form = new DropDownForm();

    public MyControl()
    {
        form.FormClosed += dropdownform_closed;
    }

    private void MethodThatShowsDropdown()
    {
        form.AddData(GetTheData());
        form.Show(this.Owner); // Or is it "this.Parent"?  I can never remember...
    }

    private void dropdownform_closed(object sender, EventArgs e)
    {
        DoSomething(form.SelectedValue);
    }
}

关于c# - 将一个窗口放在另一个窗口前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1729662/

相关文章:

c# - 为什么重命名加载的 .net 程序集有效?

c# - MVC 中具有相同签名的方法

c# - 如何为多个foreach实现正确的IEnumerator接口(interface)?

vb.net - 动态获取控件(按钮)的名称

c# - 使用 Method.Invoke 时无法传递类

c# - 仅向管理员授予对特殊表单的访问权限

c# - 当我知道行的 id 时,如何使用单元格的值?

c# - 加载外部 XSLT 时发生异常

c# - 为什么实际电子邮件大小大于我的附件和文本大小?

c# - Vista & C# - 拖放问题(与海拔无关)