プロが教える店舗&オフィスのセキュリティ対策術

VB2005初心者です。よろしくお願いします。
ComboBoxプロパティをDropDownListに設定した状態で、Itemをオールクリアしても選択したItemのテキストを残す方法はありますか?
ComboBoxプロパティをDropDownに設定するとItemは消えてテキストは残るのですが、DropDownListにすると両方とも消えてしまいます。
どうぞよろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

コピー&ペーストしてやったところ、自分の希望通りになりました。どうもありがとうございました。

お礼日時:2008/12/02 10:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!