none
DataGridViewのComboBoxを自動的にドロップダウンさせたいのですが

    質問

  •  DatagridViewのComboBoxをエンターと同時にドロップダウンさせたくて いろいろやってみました

     下記のようなコードで ドロップダウンすることはするのですが なぜかエンターしたセルではなく 前にフォーカスのあったセルのところでドロップダウンしてしまいます そのリストからデータを選択すると ちゃんとエンターしたセルにデータが入るのですが

     エンターしたセルのところでリストをドロップダウンしたいのですが 何か方法はないでしょうか?

        Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
            Dim view As DataGridView = CType(sender, DataGridView)
            Dim ind As Integer = view.CurrentCell.ColumnIndex
            If TypeName(view.Columns(ind)) = "DataGridViewComboBoxColumn" Then
                Dim con As ComboBox = CType(View1.EditingControl, ComboBox)
                con.DropDownStyle = ComboBoxStyle.DropDown
                con.DroppedDown = True
            End If
        End Sub

    _____________________________

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            DataGridView1.EditMode = DataGridViewEditMode.EditOnEnter
        End Sub

     

    2006年9月11日 11:58

回答

  • こんな感じかな?
    
    Private editingControl As Control 
    
    Private Sub dataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) 
     editingControl = e.Control 
     AddHandler editingControl.Enter, AddressOf editingControl_Enter 
    End Sub 
    
    Sub editingControl_Enter(ByVal sender As Object, ByVal e As EventArgs) 
     If Not (editingControl Is Nothing) AndAlso editingControl.GetType = GetType(DataGridViewComboBoxEditingControl) Then 
       Dim comb As DataGridViewComboBoxEditingControl = CType(editingControl, DataGridViewComboBoxEditingControl) 
       comb.DropDownStyle = ComboBoxStyle.DropDown 
       comb.DroppedDown = True 
     End If 
    End Sub 
    
    Private Sub dataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) 
     RemoveHandler editingControl.Enter, AddressOf editingControl_Enter 
    End Sub
    
    2006年9月12日 2:32
    モデレータ
  • trapemiya さん 何度もありがとうございます

    ばっちり いけました 又も感動です。

        Private editingControl As Control

    _________________________________
        Private Sub datagridview1_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
            editingControl = e.Control
            AddHandler editingControl.Enter, AddressOf editingControl_Enter
        End Sub

    _________________________________

        Sub editingControl_Enter(ByVal sender As Object, ByVal e As EventArgs)
            If Not (editingControl Is Nothing) AndAlso editingControl.GetType Is GetType(DataGridViewComboBoxEditingControl) Then
                Dim comb As DataGridViewComboBoxEditingControl = CType(editingControl, DataGridViewComboBoxEditingControl)
                comb.DropDownStyle = ComboBoxStyle.DropDown
                comb.DroppedDown = True
            End If
        End Sub

    _________________________________

        Private Sub datagridview1_CellEndEdit1(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
                 RemoveHandler editingControl.Enter, AddressOf editingControl_Enter
        End Sub

     

      

    2006年9月12日 9:07
  • If Not (editingControl Is Nothing) AndAlso editingControl.GetType Is GetType(DataGridViewComboBoxEditingControl) Then

    は、

    If editingControl.GetType Is GetType(DataGridViewComboBoxEditingControl) Then

    で、いい気がします。私の勘違いのような気がしてます。テストコードの残骸のような気がしてます。(^^;

    2006年9月12日 9:42
    モデレータ
  •  trapemiya さんからの引用

    If Not (editingControl Is Nothing) AndAlso editingControl.GetType Is GetType(DataGridViewComboBoxEditingControl) Then

    は、

    If editingControl.GetType Is GetType(DataGridViewComboBoxEditingControl) Then

    で、いい気がします。私の勘違いのような気がしてます。テストコードの残骸のような気がしてます。(^^;

     

    trapemiya さん ありがとうございます

    そうなんですか、訂正しておきます

     

    最近使い易さを求めて DataGridViewばかり 触っておりますが ノーマルではComboBoxひとつ取っても、非常に融通の利かないパーツではありますが 奥に入ってカスタマイズすると非常に可能性の高いツールだと痛感しております

    でも 思うようにカスタマイズするのは本当に難しいです。

    やっと ほぼ思うように動くDataGridViewができました

     

    いろいろと どうもありがとうございました あらためて感謝いたします。

    また すぐに壁にぶち当たると思いますので その時は又 宜しくお願い致します。

    2006年9月12日 11:57

すべての返信

  • こんな感じかな?
    
    Private editingControl As Control 
    
    Private Sub dataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) 
     editingControl = e.Control 
     AddHandler editingControl.Enter, AddressOf editingControl_Enter 
    End Sub 
    
    Sub editingControl_Enter(ByVal sender As Object, ByVal e As EventArgs) 
     If Not (editingControl Is Nothing) AndAlso editingControl.GetType = GetType(DataGridViewComboBoxEditingControl) Then 
       Dim comb As DataGridViewComboBoxEditingControl = CType(editingControl, DataGridViewComboBoxEditingControl) 
       comb.DropDownStyle = ComboBoxStyle.DropDown 
       comb.DroppedDown = True 
     End If 
    End Sub 
    
    Private Sub dataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) 
     RemoveHandler editingControl.Enter, AddressOf editingControl_Enter 
    End Sub
    
    2006年9月12日 2:32
    モデレータ
  • trapemiya さん 何度もありがとうございます

    ばっちり いけました 又も感動です。

        Private editingControl As Control

    _________________________________
        Private Sub datagridview1_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
            editingControl = e.Control
            AddHandler editingControl.Enter, AddressOf editingControl_Enter
        End Sub

    _________________________________

        Sub editingControl_Enter(ByVal sender As Object, ByVal e As EventArgs)
            If Not (editingControl Is Nothing) AndAlso editingControl.GetType Is GetType(DataGridViewComboBoxEditingControl) Then
                Dim comb As DataGridViewComboBoxEditingControl = CType(editingControl, DataGridViewComboBoxEditingControl)
                comb.DropDownStyle = ComboBoxStyle.DropDown
                comb.DroppedDown = True
            End If
        End Sub

    _________________________________

        Private Sub datagridview1_CellEndEdit1(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
                 RemoveHandler editingControl.Enter, AddressOf editingControl_Enter
        End Sub

     

      

    2006年9月12日 9:07
  • If Not (editingControl Is Nothing) AndAlso editingControl.GetType Is GetType(DataGridViewComboBoxEditingControl) Then

    は、

    If editingControl.GetType Is GetType(DataGridViewComboBoxEditingControl) Then

    で、いい気がします。私の勘違いのような気がしてます。テストコードの残骸のような気がしてます。(^^;

    2006年9月12日 9:42
    モデレータ
  •  trapemiya さんからの引用

    If Not (editingControl Is Nothing) AndAlso editingControl.GetType Is GetType(DataGridViewComboBoxEditingControl) Then

    は、

    If editingControl.GetType Is GetType(DataGridViewComboBoxEditingControl) Then

    で、いい気がします。私の勘違いのような気がしてます。テストコードの残骸のような気がしてます。(^^;

     

    trapemiya さん ありがとうございます

    そうなんですか、訂正しておきます

     

    最近使い易さを求めて DataGridViewばかり 触っておりますが ノーマルではComboBoxひとつ取っても、非常に融通の利かないパーツではありますが 奥に入ってカスタマイズすると非常に可能性の高いツールだと痛感しております

    でも 思うようにカスタマイズするのは本当に難しいです。

    やっと ほぼ思うように動くDataGridViewができました

     

    いろいろと どうもありがとうございました あらためて感謝いたします。

    また すぐに壁にぶち当たると思いますので その時は又 宜しくお願い致します。

    2006年9月12日 11:57