我附上的图片更清楚。图片中的列表框就像自动完成一样,并在用户输入时向用户显示建议。问题是此列表框的底部位于其他控件下,因此您无法看到此列表框的垂直滚动条的向下箭头。如何将其置于其他控件之上?
答案 0 :(得分:2)
ListBox包含错误的Parent。您不希望拆分器面板作为父级,它将剪切它。你不能轻易地与设计师一起给它正确的父母。使用视图+(其他Windows)+文档大纲。将ListBox从拆分器面板拖到窗体中。
答案 1 :(得分:1)
我在这里猜测,因为你的照片没有显示,但你可以使用ListBox.BringToFront()
或ListBox.SetChildIndex()
之类的东西吗?这与此问题类似:
Bring Winforms control to front
如果你没有直接访问有问题的列表框,我想这对你没有多大帮助..
答案 2 :(得分:1)
我想如果您将ListBox
控件添加到表单中并不完全正确。我猜你是在它显示的地方添加它,因此,重叠它的控件是在容器的其他部分内。如果要显示对所有其他控件的控件,则该控件将需要在整个容器区域上。因此,它不是对“Karyotype Entry”容器的一些子控件,而应该是所有三个表单部分的父容器的子容器。
答案 3 :(得分:1)
您可以将ListBox放在不同的表单中,并在需要完成列表时调用/显示表单。这将节省您不必担心ListBox是最顶层的。
使用此方法的方法是,您必须对自动完成表单进行编码,以便它不会从主表单中窃取焦点。
这里的代码可以帮助您,以防万一你想知道如何在没有激活的情况下显示表单(窃取焦点)。
private const int SW_SHOWNOACTIVATE = 4;
private const int HWND_TOPMOST = -1;
private const uint SWP_NOACTIVATE = 0x0010;
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
static extern bool SetWindowPos(
int hWnd, // window handle
int hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
uint uFlags); // window positioning flags
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
static void ShowInactiveTopmost(Form frm)
{
ShowWindow(frm.Handle, SW_SHOWNOACTIVATE);
SetWindowPos(frm.Handle.ToInt32(), HWND_TOPMOST,
frm.Left, frm.Top, frm.Width, frm.Height,
SWP_NOACTIVATE);
}
您也可以尝试覆盖ShowWithoutActivation
属性。
protected override bool ShowWithoutActivation
{
get { return true; }
}
注意:这两个代码段都来自这个问题:Show a Form without stealing focus?。