我创建了一个用户控件。它有两个文本框,一个用于描述,另一个用于 id。
接下来,我创建了一个带有数据网格视图的表单。此数据网格视图的数据源是从预定义的用户控件发送的。它将只有两个列 ID 和描述。
现在,我希望当用户控件文本框上的描述文本更改时,带有datagridview的表单显示在文本框下方,并显示匹配的数据作为参考。窗体应继续显示,直到用户按 Enter 键或离开文本框。在显示表单时,用户应该能够在用户控件文本框上键入文本以进行过滤。
当用户离开文本框或按回车键时,数据网格视图 id 列和描述列的选定行中的值应传递给用户控件。
我做得很好,但是当带有datagridview的表单出现时,显示的表单变为活动状态,我无法继续在用户控件的搜索文本框中写入。
您可以尝试使用以下扩展方法显示表单处于非活动状态:
public static class FormExtensions
{
#region Show inactive top-most
const int SW_SHOWNOACTIVATE = 4,
HWND_TOPMOST = -1;
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);
public static void ShowInactiveTopMost(this Form form)
{
ShowWindow(form.Handle, SW_SHOWNOACTIVATE);
SetWindowPos(form.Handle.ToInt32(),
HWND_TOPMOST,
form.Left,
form.Top,
form.Width,
form.Height,
SWP_NOACTIVATE);
}
#endregion
}