将一个窗口保持在另一个窗口之前

Mon*_*ong 1 c# winforms

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

如果控件位于其父窗体的底部,我不希望列表框被窗体底部剪切,所以从我收集的内容我不能将此列表框作为父窗体的子窗口..我需要创建包含列表框的新的无边框表单,并将其显示在正确的位置.

我可以做得很好,问题来自于整理表格的z顺序.我需要这个新表单始终显示在父表单上方.但我不希望这个窗口显示在父窗体上方的任何窗口上方......这就是设置窗体.TopMost会给我.

有没有其他方法可以做到这一点?ComboBoxes如何设法实现这种行为?

谢谢

Nei*_*ell 5

当您致电时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);
    }
}
Run Code Online (Sandbox Code Playgroud)