我在 DataGridView
中托管自定义编辑控件,记录为 TextBox
和 Button
一起在 UserControl
.我继承自 DataGridViewColumn
对于新列和 DataGridViewTextBoxCell
对于新单元格。
用正常 DataGridViewTextBoxCell
, 如果您在单元格获得焦点时按下某个键,它将开始编辑模式并且您键入的字符将出现在 TextBoxEditingControl
中。 .但是,在我继承的单元格中,按键没有传递任何值。 (实际上,您必须手动在 InitializeEditingControl
中传递当前单元格值,否则根本不会显示任何内容。)因此,您键入的第一个字符(开始编辑模式的字符)将丢失。
我试过 OnKeyPress
, OnKeyDown
, 和 OnKeyUp
在 DataGridViewCell
但他们永远不会被召唤。 KeyEntersEditMode
但是,似乎确实会被调用,并且仅在它检查按下的键时才被调用,因此这可能是一个不错的起点。那么问题就变成了如何将 KeyEventArgs 转换为 char
.这对于字母和数字来说是微不足道的,但由于并非所有键盘都是一样的,因此处理其他键充其量是困惑和复杂的。如果有一个转换器类可以自动执行此操作,请赐教。
有没有其他人遇到过这个问题或找到了一个好的解决方法?
注意:此问题适用于 EditMode
设置为 EditOnKeystroke
的任何变体.设置为 EditOnEnter
是我项目的有效解决方法,但我想模拟 TextBoxEditingControl
的默认行为以及。
最佳答案
尝试将用户控件的 KeyPreview 设置为 true。然后检查启动编辑过程的键是否会触发 keydown,即使对于用户控件也是如此。如果是,您可以在文本控件进入编辑模式后简单地存储和分配字符。
关于.net - 在进入编辑模式时捕获第一个字符 - DataGridView 中的自定义编辑控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/373856/