处理C1FlexGrid中ComboBox列的KeyDown事件

时间:2014-11-06 10:36:05

标签: vb.net combobox keydown key-events c1flexgrid

我有一个ComboBox“我将其命名为Combo”,它在第二列中加载到C1FlexGrid“我将其命名为fgMain”中,我想处理键盘以使用户可以在此组合框上按下输入。

我使用此代码创建组合框并用数据填充它:

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中第2列中任何单元格的按Enter键,它只处理第2列中任何单元格上的第1个输入并显示组合框的下拉列表:

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    

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

2 个答案:

答案 0 :(得分:0)

看起来您的问题正在发生,因为您正在使用FlexGrid的KeyPress事件,而您希望ComboBox处理KeyPress事件。您可以使用ComboBox的事件,或者,如果您需要某些网格参考,请使用KeyPressEdit事件。 KeyPressEdit事件对应于System.Windows.Forms.Control.KeyPress事件,除了它在网格处于编辑模式时触发(在这种情况下,接收密钥的控件是编辑器,而不是网格本身)。 p>

请参阅以下代码段:

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 :(得分:0)

我的团队负责人告诉我,除了组合成C1FlexGrid之外,这不是一个好方法。你可以这样使用

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