Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有弹出编辑器的自定义DataGridView控件_C#_Winforms_Datagridview_Custom Controls - Fatal编程技术网

C# 带有弹出编辑器的自定义DataGridView控件

C# 带有弹出编辑器的自定义DataGridView控件,c#,winforms,datagridview,custom-controls,C#,Winforms,Datagridview,Custom Controls,我已经实现了自定义的DataGridViewColumn,DataGridViewCell,以及DataGridViewEditingControl类,如示例中所示 我遇到的问题是,虽然MSDN示例中的日期时间选择器能够弹出其日历选择器,并将其显示在下面的行和相邻单元格的顶部;我的控件被限制在DGV单元格大小定义的空间内。我的控件由一个文本框和一个自动完成建议列表组成;因此,我需要一种方法来让列表显示,而不使行的高度达到正常值的几倍 由于我从MSDN中选取了这个示例,并且只将DateTimePi

我已经实现了自定义的
DataGridViewColumn
DataGridViewCell
,以及
DataGridViewEditingControl
类,如示例中所示

我遇到的问题是,虽然MSDN示例中的
日期时间选择器
能够弹出其日历选择器,并将其显示在下面的行和相邻单元格的顶部;我的控件被限制在DGV单元格大小定义的空间内。我的控件由一个文本框和一个自动完成建议列表组成;因此,我需要一种方法来让列表显示,而不使行的高度达到正常值的几倍


由于我从MSDN中选取了这个示例,并且只将
DateTimePicker
替换为
MyControl
和其他相关更改,因此我假设魔法发生在基本
DateTimePicker
类中;但我不知道需要在控件中更改什么才能使其以相同的方式运行。

您实现的
DataGridViewEditingControl
已调整大小,移动到单元格区域,并在单元格进入编辑模式时可见。除了编辑控件之外,您还需要一个“弹出控件”,当编辑控件处于活动状态时可以创建该控件,当编辑控件处于非活动状态时可以销毁该控件

下面是一个简单的WinForms弹出控件示例:

但是,如果您只需要一个自动完成的单元格,则可以使用stock
DataGridViewTextBoxColumn
DataGridViewComboxColumn
免费获得该单元格


我认为创建自定义控件(用于常规表单)的最初原因包括标准的autocomplete不够好。我不记得是性能还是功能是限制。当潜在值列表包含数千个元素时,我需要一些性能良好的东西,并且可以在任何地方匹配子字符串,而不仅仅是从一开始。例如,用户输入“Jo”时,可能会显示“Smith,John”。@Tergiver如果您有时间,请检查我的问题