如何使用文本框正下方的 datagridview 显示另一个窗体,以筛选网格数据



我创建了一个用户控件。它有两个文本框,一个用于描述,另一个用于 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
}

最新更新