首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理C1FlexGrid内ComboBox列的KeyDown事件

处理C1FlexGrid内ComboBox列的KeyDown事件
EN

Stack Overflow用户
提问于 2014-11-06 18:36:05
回答 2查看 1.8K关注 0票数 1

我有一个ComboBox "I named it Combo“,它被加载到第二列中的C1FlexGrid "I named it fgMain”中,我想要处理键盘,使用户可以在这个组合框上按enter键。

我使用以下代码来创建combobox并用数据填充它:

代码语言:javascript
复制
fgMain.Cols(2).Editor = Combo    
Combo.DrawMode = DrawMode.Normal    
Dim dap As New OleDbDataAdapter()    
        Dim dat As New DataTable()
        dap.SelectCommand = New OleDbCommand("SELECT EmpInfo.ManualId, EmpInfo.Name FROM EmpInfo;", conn)
        dap.Fill(dat)
        Combo.DataSource = dat
        Combo.DisplayMember = "Name"
        Combo.ValueMember = "ManualId"

我使用这段代码来处理c1flexgrid中第二列中任何单元格的回车,它只处理第二列中任何单元格上的第一次回车,并使组合框的下拉列表出现:

代码语言:javascript
复制
Private Sub fgMain_KeyDown(sender As Object, e As KeyEventArgs) Handles fgMain.KeyDown    
    Select Case e.KeyCode    
        Case Keys.Enter    
            Select Case fgMain.Selection.c1    
                Case 2    
                    fgMain.StartEditing(fgMain.Selection.BottomRow, 2)    
                    e.SuppressKeyPress = True    
                    e.Handled = True    
            End Select
     End Select    

现在我需要处理的是,如果用户选择了他想要的项目,那么他将按enter键。第二个time...my问题是当我按第二个enter键选择一个选项时,它只出现在“fgMain(e.row,2)”中不到一秒,然后整行消失,fgMain(e.row,2)变为空

EN

回答 2

Stack Overflow用户

发布于 2014-11-07 18:50:01

看起来您的问题是因为您正在使用FlexGrid的KeyPress事件,而您希望ComboBox处理KeyPress事件。你可以使用组合框的事件,或者,如果你需要一些网格的引用,可以使用KeyPressEdit事件。KeyPressEdit事件与System.Windows.Forms.Control.KeyPress事件相对应,只是它在网格处于编辑模式时激发(在本例中,接收键的控件是编辑器,而不是网格本身)。

请参阅以下代码片段:

代码语言:javascript
复制
Private Sub fgM_KyDwnEdt(ByVal sender As Object, ByVal e As KeyEditEventArgs) Handles fgMain.KeyDownEdit
    Select Case e.KeyCode
        Case Keys.Enter
            Select Case fgMain.Selection.c1
                Case 2
                    fgMain.StartEditing(fgMain.Selection.BottomRow, 2)
                    e.Handled = True
            End Select
    End Select
End Sub
票数 1
EN

Stack Overflow用户

发布于 2014-12-10 16:31:26

我的团队领导告诉我,这不是一个好方法,而是一个组合框到一个C1FlexGrid。你可以这样用

代码语言:javascript
复制
Dim tmpStyle As CellStyle
Dim MyCmd As New OleDbCommand
Dim DbReader As OleDbDataReader
MyCmd.Connection = conn
MyCmd.CommandText = "SELECT EmpInfo.ManualId, EmpInfo.Name FROM EmpInfo;"
DbReader = MyCmd.ExecuteReader
dtMap.Clear()
Do While DbReader.Read
    dtMap.Add(DbReader("ManualId"), DbReader("Name"))
Loop
tmpStyle = fgMain.Styles.Add("Name")
tmpStyle.DataType = GetType(Integer)
tmpStyle.DataMap = dtMap
fgMain.Cols(2).Style = tmpStyle
DbReader.Close()
MyCmd.Dispose()

你也不需要KeyPress事件或KeyPressEdit事件来处理回车键。您只需要处理AfterEdit事件来处理编辑组合框列中的任何单元格后发生的事情。我希望这足以帮助任何需要将组合框放入C1FlexGrid的人

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26777266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档