如何通过自定义键盘实现GridView的TextEdit编辑功能?
问题:自定义键盘向GridView编辑单元格输入字符的实现
已实现基于DataTable的GridView,以及可向TextBox输入字符的自定义键盘表单,调用方式如下:
frmKeyboard k = new frmKeyboard(myTextBox);
按下键盘按键时字符会插入到TextBox中,但GridView处于编辑状态时使用的是TextEdit控件,无法直接传入TextBox,当前调用代码如下:
private void gridSelfLearning_ShownEditor(object sender, EventArgs e) { GridView self = sender as GridView; TextBox prova = null; if(self.ActiveEditor is TextEdit) { frmKeyboard k = new frmKeyboard(prova); k.ShowDialog(); } }
需要解决如何正确传入对应的TextEdit控件,实现自定义键盘向GridView单元格输入字符的功能。
解决方案
方法1:直接传递TextEdit内部的TextBox
DevExpress的TextEdit控件内部包含一个实际接收输入的TextBox,可通过MaskBox属性获取。修改调用代码如下:
private void gridSelfLearning_ShownEditor(object sender, EventArgs e) { GridView self = sender as GridView; // 直接将TextEdit转换并获取内部TextBox if(self.ActiveEditor is TextEdit textEdit) { TextBox innerTextBox = textEdit.MaskBox; frmKeyboard k = new frmKeyboard(innerTextBox); k.ShowDialog(); } }
这种方式无需修改自定义键盘frmKeyboard的原有逻辑,因为仍然传递的是TextBox类型,和之前的调用逻辑完全兼容。
方法2:扩展自定义键盘支持TextEdit
如果希望直接传递TextEdit控件给自定义键盘,可以修改frmKeyboard的构造函数,同时支持TextBox和TextEdit类型:
// 在frmKeyboard类中添加重载构造函数 private TextBox _targetInputBox; public frmKeyboard(TextBox textBox) { InitializeComponent(); _targetInputBox = textBox; } public frmKeyboard(TextEdit textEdit) { InitializeComponent(); // 获取TextEdit内部的TextBox作为操作目标 _targetInputBox = textEdit.MaskBox; }
之后调用时可以直接传入TextEdit:
private void gridSelfLearning_ShownEditor(object sender, EventArgs e) { GridView self = sender as GridView; if(self.ActiveEditor is TextEdit textEdit) { frmKeyboard k = new frmKeyboard(textEdit); k.ShowDialog(); } }
关键说明
自定义键盘插入字符时,操作的是_targetInputBox(即TextEdit内部的MaskBox),字符会直接同步到GridView的编辑单元格中,编辑完成后GridView会自动将值同步到绑定的DataTable数据源。
内容的提问来源于stack exchange,提问作者rosasimona di maio
相关产品推荐
相关产品推荐

