Winforms 如何在文本框下方显示另一个带有datagridview的表单以过滤网格数据
我已经创建了一个usercontrol。它有两个文本框,一个用于描述,另一个用于标识 接下来,我使用datagridview创建了一个表单。此datagridview的数据源是从预定义的usercontrol发送的。它只有两个列ID和描述 现在我想当usercontrol文本框中用于描述的文本发生更改时,带有datagridview的表单显示在文本框的正下方,并显示匹配的数据作为参考。表单应一直显示,直到用户按enter键或离开文本框。显示表单时,用户应能够在usercontrol文本框中键入文本以进行筛选 当用户离开文本框或按enter键时,datagridview id列和descriptions列的选定行中的值应传递给usercontrolWinforms 如何在文本框下方显示另一个带有datagridview的表单以过滤网格数据,winforms,datagridview,Winforms,Datagridview,我已经创建了一个usercontrol。它有两个文本框,一个用于描述,另一个用于标识 接下来,我使用datagridview创建了一个表单。此datagridview的数据源是从预定义的usercontrol发送的。它只有两个列ID和描述 现在我想当usercontrol文本框中用于描述的文本发生更改时,带有datagridview的表单显示在文本框的正下方,并显示匹配的数据作为参考。表单应一直显示,直到用户按enter键或离开文本框。显示表单时,用户应能够在usercontrol文本框中键入文
我做得很好,但是当出现带有datagridview的表单时,显示的表单变为活动状态,并且我无法继续在usercontrol的搜索文本框中写入内容。您可以尝试使用以下扩展方法将表单显示为非活动状态:
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
}
它必须是一个表单吗?为什么不创建一个包含DataGridView的面板,并将该面板的父级设置为文本框所在的窗体。这样你就不必担心失去焦点,用户将无法再将表单拖到其他地方,这是一个好主意。我试过改变形状的高度,但它被其他重叠的面板消失了。如我所见,如果使用面板而不是表单,我需要在我希望使用此想法的每个表单中创建面板。我希望它被用作我们刚刚发送数据源的组合框,并在需要时用作组件。谢谢你的评论。