• ベストアンサー

コンボボックスのテキストを消さないようにするには?

AKARI0418の回答

  • ベストアンサー
  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.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

yuji_yumi
質問者

お礼

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

関連するQ&A

  • コンボボックスの開いたリストを閉じるには

    コンボボックスのリストを開くのはComboBox1.DropDownでできますが、閉じるのはどういう風にやればいいでしょうか。 今ユーザーフォームで Private Sub Combobox1_Change() ComboBox1.Clear v = ComboBox1.Text For i = 1 To 300 c = Worksheets("Sheet1").Cells(i, "A") If v = Left(c, Len(v)) And Len(v) > 0 Then ComboBox1.AddItem c End If Next i ComboBox1.DropDown End Sub と言う風にしていますが、リストを開きっぱなしだと変な表示になってしまい、マウスクリックで一旦閉じてから開かないと変な表示になってしまうのです。 そこで一旦リストをマクロで閉じさせてから再び開きたいのですが、どうすればいいでしょうか。

  • コンボボックスのクリアー

    VisualBasic2008です combobox1 の指定で combobox2 にデータベースから datasourceで取り込んでいます。 この際に、combobox2をクリアーしてから取り込みたいのですが With ComboBox2.items .Clear() End With この方法では「データソース プロパティを設定したときに Items コレクションを変更することはできません。」とエラーになります。 色々他の方法で行いましたが、同じエラーになります。 どのようにすれば良いのかご指導お願いします。

  • コンボボックスにて複数列の値を使う方法

    VB.NET2008にて開発中です。 下記のように、コンボボックスのDataSourceにデータベースから取得した3列のDataTableを設定した場合、3列目の値を取得する方法を教えてください。  ComboBox.DataSource = DataTable  ComboBox.DisplayMember = "1列目"  ComboBox.ValueMember = "2列目"  1列目の取得・・・ComboBox.SelectedValue  2列目の取得・・・ComboBox.Text  3列目の取得・・・ComboBox.??? 表示の必要は無く、コンボボックスで選択したアイテムに関連する値を使いたいだけです。 よろしくお願いします。

  • テキストボックスのデフォルト設定とコンボボックスの更新について

    テキストボックスのデフォルト設定とコンボボックスの更新について エクセルのVBAで、ユーザーフォームを使用しています。 ユーザーフォームの中にはコンボボックスとテキストボックスとボタンがあります。 コンボボックスには「ABCDEFGHIJKLM」と合計13のリストがあります。 ユーザーフォーム起動時に、コンボボックスには最初のリスト(A)が表示 されていて、「次へ」ボタンと「戻る」ボタンの2つを用意しています。 (1)ユーザーフォーム起動時にテキストボックスに「0」を入れる方法を教えていただけないでしょうか。 コンボボックスで「A」が選択された状態で「次へ」ボタンをおしたら「B」が選ばれる。 「D」が選択された状態で「次へ」ボタンをおしたら「E」が選ばれる。 「M」が選択された状態で「次へ」ボタンをおしたら「A」が選択される。(リストの最初に戻る。) というのは、次のVBAで上手くいきました。 If Combobox1.ListIndex < Combobox1.ListCount - 1 Then Combobox1.Text = Combobox1.List(Combobox1.ListIndex + 1) Else Combobox1.Text = Combobox1.List(0) End If (2)しかし「E」が選択された状態で「戻る」ボタンをおしたら「D」が選ばれる。 「G」が選択された状態で「戻る」ボタンをおしたら「F」が選ばれる。 「A」が選択された状態で「戻る」ボタンをおしたら「M」が選ばれる。(リストの最後に戻る。) といった内容のマクロがうまく組めません。 教えていただけると助かります。

  • コンボボックスのクリア方法について教えて下さい(vb6.5)

    コンボボックスのクリア方法について教えて下さい(vb6.5) ComboBox1で選択したものによって、 ComboBox2で表示するものを変えたいと思っています。 ただ、一度ComboBox1で選択した後にComboBox2を開くと、 ComboBox2は前回のものがどんどん足されていきます。 コンボボックスのクリア方法について、 どの様にすればよいかご教示のほど、 宜しくお願い致します。 Private Sub ComboBox1_Change() UserForm1.ComboBox2.RemoveItem (0) If ComboBox1.Text = 1 Then UserForm1.ComboBox2.AddItem "A" UserForm1.ComboBox2.AddItem "B" UserForm1.ComboBox2.AddItem "C" ElseIf ComboBox1.Text = 2 Then UserForm1.ComboBox2.AddItem "D" UserForm1.ComboBox2.AddItem "E" UserForm1.ComboBox2.AddItem "F" Else UserForm1.ComboBox2.AddItem "G" UserForm1.ComboBox2.AddItem "H" UserForm1.ComboBox2.AddItem "I" End If End Sub -------------------------------------- Private Sub UserForm_Initialize() UserForm1.ComboBox1.AddItem "1" UserForm1.ComboBox1.AddItem "2" UserForm1.ComboBox1.AddItem "3" End Sub

  • コンボボックスのボタンを押しても、アイテムリストが開きません。

    コンボボックスのボタンを押しても、アイテムリストが開きません。 h_ComboBox = CreateWindowEx(0, TEXT("COMBOBOX"), TEXT(""),WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST,16, 90, 500, 24,hWnd, (HMENU)IDC_COMBOBOX, h_Inst, NULL); SendMessage(h_ComboBox, CB_ADDSTRING, 0, (LPARAM)"試験1"); SendMessage(h_ComboBox, CB_ADDSTRING, 0, (LPARAM)"試験2"); SendMessage(h_ComboBox, CB_ADDSTRING, 0, (LPARAM)"試験3"); SendMessage(h_ComboBox, CB_SETCURSEL, 0, 0); このようなボックスを数個作っていますが、最初の3個のボックスはリストが開くのですが後が開きません。 解決策を教えてください。

  • VB2008でコンボボックスのクリアについて

    VB2008でコンボボックスのクリアについて お世話になります。 コンボの設定を With ComboBox1 .Items.Clear() .Items.Add("a") .Items.Add("b") .SelectedIndex = 0 End With のようにしていた場合 ComboBox1.Items.Clear()を実行しても "a"の値がコンボに残るみたいなのですが、 指定の方法が悪いのでしょうか? .SelectedIndex = 0を指定しないと クリアされるみたいなのですが。 よろしくお願いいたします。

  • 複数のコンボボックスのドロップダウン表示

    ユーザーフォームにテキストボックス2個の後にコンボボックス2個を縦に配置し、上から入力していき一つ目のコンボボックスはEnterイベントでドロップダウン表示できるのですが 項目をクリックし選択した後 次のコンボボックスに移り同じようにドロップダウン表示したいのです。 コードは簡単に書くと以下のような感じです Private Sub ComboBox1_Enter() ComboBox1.DropDown End Sub Private Sub ComboBox1_Change() ComboBox2.SetFocus End Sub Private Sub ComboBox2_Enter() ComboBox2.DropDown End Sub で処理しようとするとフォーカスは移っている様なのですが、ドロップダウン表示されずカーソルのみ表示された状態になるのですが。 どうにか出来ないものでしょうか? お願いします。 Excel2003 使用しています。

  • VC# コンボボックスの大文字・小文字を区別する

    VC# 2005で、以下のようなコードを書くと、大文字・小文字の区別がなく、 1行目で追加したアイテムが選択された状態になってしまいます。 comboBox1.Items.Add("a"); comboBox1.Text = "A"; 大文字・小文字を別として扱うことはできますでしょうか?

  • コンボボックスみたいなボタン?

    みなさん、こんにちは 添付画像のような、コンボボックスのDropDownStyleをDropDownListにした時のような見た目のボタンは、VB.Netで使うことは可能でしょうか? (左側のテキスト部分をクリックすると通常のボタンのように処理が実行され、  右側の▼部分をクリックするとプルダウンして処理が選択できるボタンです。) すみませんが、どなたか教えてください。 よろしくお願いします。