- 締切済み
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 どこが問題なのかどなたかご教授いただけると助かります。どうぞよろしくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- MARU4812
- ベストアンサー率43% (196/452)
特に問題は無さそうに思います。 ドロップダウンボタンを含めたセルの幅と同じ幅で表示されます。
補足
ご回答ありがとうございます。 > ドロップダウンボタンを含めたセルの幅と同じ幅で表示されます。 そう期待していたのですが、実際はそうなりませんでした。私の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