我正在编写一个UserControl,它的行为类似于下拉列表,基本上是一个文本框,其下方会弹出一个列表框......
如果控件位于其父窗体的底部,我不希望列表框被窗体底部剪切,所以从我收集的内容我不能将此列表框作为父窗体的子窗口..我需要创建一个包含列表框的新的无边框表单,并将其显示在正确的位置。
我可以做得很好,问题在于整理表格的z顺序。我需要这个新表单始终显示在父表单上方。但我不希望这个窗口显示在父窗体上方的任何窗口上方......这就是设置窗体.TopMost会给我。
还有其他办法吗? ComboBoxes如何设法实现这种行为?
由于
答案 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顺序中重叠它。