我有一个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)变空了
答案 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