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

时间:2009-11-13 14:46:51

标签: c# winforms

我正在编写一个UserControl,它的行为类似于下拉列表,基本上是一个文本框,其下方会弹出一个列表框......

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

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

还有其他办法吗? ComboBoxes如何设法实现这种行为?

由于

3 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

我不确定它是否适用于您的应用,但使用ShowDialog()显示您的“列表”会将其保存在正确的位置。缺点是它不允许您在列表打开时返回父表单。

答案 2 :(得分:0)

您应该只需要在调用ShowModalDialog或Show时提供父窗体。当你这样做时,表格是第一个的孩子,并且总是在z顺序中重叠它。