none
Windows Vista の コンボボックス RRS feed

  • 質問

  • いつもお世話になります。

    V5と申します。

     

    VB.NET2005で作成したアプリがあります。

    コンボにフォーカスを得たときに、以下のロジックで

    Windows XPでは問題なく選択された状態になります。ところが、

    Windows Vistaでは、選択状態となりません。ただ、マウスカーソルを

    もっていきますと、選択状態の色になります。

    コンボボックスにフォーカスを得たら、わかりやすく選択状態に

    Vista上でしたいのですが、方法を教えてください。

    よろしく、お願いいたします。

     

        Public Sub cmbBox_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbBox.Enter

    Dim strW  as String

     

    strW = CType(sender, System.Windows.Forms.ComboBox).Text
    CType(sender, System.Windows.Forms.ComboBox).SelectionStart = 0
    CType(sender, System.Windows.Forms.ComboBox).SelectionLength = strW.Length   

     

    End Sub

     

     


     


     

    2007年9月10日 10:01

回答

  •  V5 さんからの引用

    ただ、マウスカーソルをもっていきますと、選択状態の色になります。

    Vistaかどうかはともかく、そのようにしたいならMouseEnterイベントのハンドラではないのでしょうか。

    またなぜ1行1行わざわざsenderをキャストしているのでしょうか。

    こんな感じでどうでしょうか。

    Code Snippet

        Private Sub cmbBox_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbBox.MouseEnter
            cmbBox.SelectAll()
        End Sub

     

     

    2007年9月10日 10:53
  •  V5 さんからの引用

    例えば、反転表示させるなど(色をつける)、VB.NET2005で良い方法を教えてください。

    よろしくお願いいたします。

    コンボボックスのFlatStyle プロパティをPopupにするとかどうでしょうか。

     

    FlatStyle 列挙体

    http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.flatstyle(VS.80).aspx

    2007年9月11日 4:50
  • 今更ですが同様の現象で悩んでいて以下方法で回避出来ました。

        Private Const WM_UPDATEUISTATE As Integer = &H128

        Declare Ansi Function SendMessage Lib "user32" Alias "SendMessageA" _
            (ByVal hWnd As IntPtr, ByVal wMsg As Integer, _
              ByVal wParam As Integer, _
              ByVal lParam As Integer) As Integer

        'Test
        Private Sub Form1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DoubleClick
            ComboBox1.Focus()
            SendMessage(ComboBox1.Handle, WM_UPDATEUISTATE, &H10002, 0)
        End Sub

    毎回実装しなくても済む方法があったら教えてください。
    (今回は継承して部品側で対処するつもりです)

    2009年12月15日 8:56

すべての返信

  •  V5 さんからの引用

    ただ、マウスカーソルをもっていきますと、選択状態の色になります。

    Vistaかどうかはともかく、そのようにしたいならMouseEnterイベントのハンドラではないのでしょうか。

    またなぜ1行1行わざわざsenderをキャストしているのでしょうか。

    こんな感じでどうでしょうか。

    Code Snippet

        Private Sub cmbBox_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbBox.MouseEnter
            cmbBox.SelectAll()
        End Sub

     

     

    2007年9月10日 10:53
  • 申し訳ございません。質問しかたが悪かったです。
    もう一度、質問させてください。

     

    Windows XPにおいて、コンボボックス(DropDownStyle = DropDownListのとき)
    にフォーカスがきたら、反転表示され、見た目でわかります。
    Windows Vistaでは、コンボボックスにフォーカスがきても反転表示しませんので、
    フォーカスがあるかどうか、わかりにくいです。
    そこで、コンボボックスにフォーカスがあるか、ないかの見た目でわかるように

    したいので、良い知恵がないかと質問させていただきました。
    例えば、反転表示させるなど(色をつける)、VB.NET2005で良い方法を教えてください。

    よろしくお願いいたします。

    2007年9月10日 18:13
  •  V5 さんからの引用

    例えば、反転表示させるなど(色をつける)、VB.NET2005で良い方法を教えてください。

    よろしくお願いいたします。

    コンボボックスのFlatStyle プロパティをPopupにするとかどうでしょうか。

     

    FlatStyle 列挙体

    http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.flatstyle(VS.80).aspx

    2007年9月11日 4:50
  • IIJIMASさん、ご回答をありがとうございました。

     

    私が考えていたイメージどおりになりましたが

    ただ、1つ、外枠の罫線が表示されていないので残念です。

    外枠の罫線を常に表示をする方法はないでしょうか?

     

    よろしく、お願いいたします。

     

    2007年9月11日 7:01
  • 今更ですが同様の現象で悩んでいて以下方法で回避出来ました。

        Private Const WM_UPDATEUISTATE As Integer = &H128

        Declare Ansi Function SendMessage Lib "user32" Alias "SendMessageA" _
            (ByVal hWnd As IntPtr, ByVal wMsg As Integer, _
              ByVal wParam As Integer, _
              ByVal lParam As Integer) As Integer

        'Test
        Private Sub Form1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DoubleClick
            ComboBox1.Focus()
            SendMessage(ComboBox1.Handle, WM_UPDATEUISTATE, &H10002, 0)
        End Sub

    毎回実装しなくても済む方法があったら教えてください。
    (今回は継承して部品側で対処するつもりです)

    2009年12月15日 8:56
  • フォーラムオペレーターの高橋春樹です。

    IIJIMASさん、V5さん、ugenさん
    MSDNフォーラムのご利用ありがとうございます。

    ugenさん
    古い投稿であっても、問題の解決策を投稿して頂けると、
    今後同じような問題で悩んでいる人が、この情報を参考にして問題解決できるので、大変助かります。
    ご投稿ありがとうございました。

    V5さん
    今回、IIJIMASさんとugenさんからの投稿が有用な情報と思いましたので、
    勝手ながら、回答マークを付けさせてもらいました。
    もし問題がありましたら、回答マークを削除することも可能です。

    今後ともMSDNフォーラムをよろしくお願いします(^_^)


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    2009年12月24日 1:41