- ベストアンサー
コンボボックスのテキストを消さないようにするには?
VB2005初心者です。よろしくお願いします。 ComboBoxプロパティをDropDownListに設定した状態で、Itemをオールクリアしても選択したItemのテキストを残す方法はありますか? ComboBoxプロパティをDropDownに設定するとItemは消えてテキストは残るのですが、DropDownListにすると両方とも消えてしまいます。 どうぞよろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
オーナードローを使用すれば可能になると思います。 新規フォームにcomboboxとbuttonを追加して実行してみてください。 下記のソースでは、button1のイベントで、combobox1の値をクリアーし、選択されているアイテムのテキストを表示するというものです。 Public Class Form1 Private str As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ComboBox1.DrawMode = DrawMode.OwnerDrawFixed ComboBox1.Items.Add("aaa") ComboBox1.Items.Add("bbb") ComboBox1.Items.Add("ccc") ComboBox1.SelectedIndex = 0 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If ComboBox1.SelectedIndex <> -1 Then str = ComboBox1.SelectedItem.ToString Else str = Nothing End If ComboBox1.Items.Clear() MessageBox.Show(ComboBox1.SelectedIndex & ComboBox1.SelectedItem) End Sub '項目を描画する Private Sub ComboBox1_DrawItem(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem '背景を描画する '項目が選択されている時は強調表示される e.DrawBackground() Dim cmb As ComboBox = CType(sender, ComboBox) '項目に表示する文字列 Dim txt As String If e.Index > -1 Then txt = cmb.Items(e.Index).ToString() Else 'txt = cmb.Text txt = str End If '使用するフォント Dim f As New Font(txt, cmb.Font.Size) '使用するブラシ Dim b = New SolidBrush(e.ForeColor) '文字列を描画する Dim ym As Single = _ (e.Bounds.Height - e.Graphics.MeasureString(txt, f).Height) / 2 e.Graphics.DrawString(txt, f, b, e.Bounds.X, e.Bounds.Y + ym) f.Dispose() b.Dispose() 'フォーカスを示す四角形を描画 e.DrawFocusRectangle() End Sub End Class
お礼
コピー&ペーストしてやったところ、自分の希望通りになりました。どうもありがとうございました。