• 締切済み

DataGridViewのコンボボックスについて

開発環境:Visual Basic 2005 DataGridViewのDataGridViewTextBoxColumnの1行目をコンボボックスにして、 そのコンボボックスのドロップダウン幅を100に設定しようとしていますが、うまくいきません。 DataGridViewをフォームに貼り付け、以下のプログラムを実行すると、幅が120くらいになってしまいます。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load DataGridView1.Columns.Clear() DataGridView1.AllowUserToAddRows = False Dim TextColumn As New DataGridViewTextBoxColumn TextColumn.Name = "Name" TextColumn.Width = 100 Dim ComboColumn As New DataGridViewComboBoxColumn ComboColumn.Name = "Type" Dim List() As String = {"Type A", "Type B", "Type O"} ComboColumn.DataSource = List ComboColumn.DropDownWidth = 100 DataGridView1.Columns.Add(TextColumn) DataGridView1.Columns.Add(ComboColumn) For i As Integer = 1 To 5 DataGridView1.Rows.Add() Next Dim ComboCell As New DataGridViewComboBoxCell Dim NameList() As String = {"Name A", "Name B", "Name C"} ComboCell.DataSource = NameList ComboCell.DropDownWidth = 100 DataGridView1.Rows(0).Cells(0) = ComboCell End Sub どこが問題なのかどなたかご教授いただけると助かります。どうぞよろしくお願い致します。

みんなの回答

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

特に問題は無さそうに思います。 ドロップダウンボタンを含めたセルの幅と同じ幅で表示されます。

lovelykarl
質問者

補足

ご回答ありがとうございます。 > ドロップダウンボタンを含めたセルの幅と同じ幅で表示されます。 そう期待していたのですが、実際はそうなりませんでした。私のPC環境の問題でしょうか・・・ ところで本件、自己解決しました。解決した事をもう少し早くご報告したかったのですが、本サイトはシステム上、どなたからか回答があるまでコメントを入れない仕組みになっている様で、ご報告が今日になってしまいました。 下記の様にコンボボックスセルのエンター時にDropDownStyleを設定することで解決しました。 なぜこれでよくなるのか、よくわかりません。どなたか解説していただけると助かります。   Private editingControl As DataGridViewComboBoxEditingControl   Private Sub datagridview1_EditingControlShowing(ByVal sender As Object, ByVal e As _   DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing     If TypeOf e.Control Is DataGridViewComboBoxEditingControl Then       editingControl = e.Control       AddHandler editingControl.Enter, AddressOf editingControl_Enter     End If   End Sub   Sub editingControl_Enter(ByVal sender As Object, ByVal e As EventArgs)     editingControl.DropDownStyle = ComboBoxStyle.DropDown   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

関連するQ&A