2014-11-06 6 views
0

У меня есть ComboBox «Я назвал его Combo», который загружается внутри C1FlexGrid «Я назвал его fgMain» во втором столбце, и я хочу обрабатывать клавиатуру, чтобы нажимать клавишу enter этот combobox доступен для пользователей.Обработка события KeyDown столбца ComboBox внутри C1FlexGrid

I Используйте этот код, чтобы создать выпадающий и заполнить его данными:

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" 

Я использую этот код для обработки нажатия ввести в любую ячейку в столбце 2 в c1flexgrid это только ручка первый вводите давила на любой ячейки в колонке 2 и сделать выпадающий список появляется выпадающий список:

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  

теперь мне нужно обрабатывать, если пользователь выбрал его нужный элемент, то он будет давить ввести во второй раз ... моя проблема, когда я нажимаю второй введите, чтобы выбрать выбранный элемент, появляется i n "fgMain (e.row, 2)" только в течение менее одной секунды, тогда вся строка исчезает, а fgMain (e.row, 2) становится пустым

ответ

0

Похоже, ваша проблема возникает из-за того, что вы используете KeyPress событие FlexGrid, тогда как вы хотите, чтобы ComboBox обрабатывал событие KeyPress. Вы можете использовать событие ComboBox или, если вам нужна ссылка на сетку, используйте событие KeyPressEdit. Событие KeyPressEdit соответствует событию System.Windows.Forms.Control.KeyPress, за исключением того, что он запускается, когда сетка находится в режиме редактирования (в этом случае элементом управления, который получает ключ, является редактор, а не сама сетка).

См следующий фрагмент кода:

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 
+0

Спасибо, господин Вишвакарма за вашу помощь. Но моя проблема заключается не в том, чтобы начать редактирование 'fgMain.StartEditing (fgMain.Selection.BottomRow, 2)'. моя проблема состоит в том, чтобы выделить выделенный элемент в 'fgMain (fgMain.Selection.BottomRow, 2)' после второго ввода, чтобы подтвердить выбор этого элемента. Я хочу обрабатывать нажатие enter в 'fgMain_KeyDownEdit' для приема данных, чтобы не вводить причину в режиме редактирования Событие KeyDownEdit срабатывает, когда ячейка уже находится в режиме редактирования «Далеко, насколько я знаю» –

+0

Я использую [KeyDown] (http://helpcentral.componentone.com/nethelp/c1flexgrid/#C1.Win.C1FlexGrid.4~C1.Win .C1FlexGrid.C1FlexGrid ~ KeyDown_EV.html) Событие не [KeyPress] (http://helpcentral.componentone.com/nethelp/c1flexgrid/#C1.Win.C1FlexGrid.4~C1.Win.C1FlexGrid.C1FlexGridBase~KeyPress_EV.html) Событие –

+0

Если бы вы могли использовать keypressedit вместо keypress или keydownedit вместо keydown, вы бы увидели разницу, которую я пытался объяснить –

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, чтобы справиться с тем, что произойдет после редактирования любой ячейки в столбце combobox ur. надеюсь, этого было достаточно, чтобы помочь кому-либо когда-либо понадобится поставить combobox в C1FlexGrid

 Смежные вопросы

  • Нет связанных вопросов^_^