none
ComboBox如何在DropDown事件中改变DropDownStyle? RRS feed

  • 问题

  • 为了让用户在打开ComboBox下拉列表时,能够在文本框中输入数据,以便检索列表,我试图在DropDown事件中将DropDownStyle改为ComboBoxStyle.DropDown,但它却导致了列表关闭,从而无法打开列表。怎么办好呢?

        Protected Overrides Sub OnDropDown(e As System.EventArgs)
            Me.DropDownStyle = ComboBoxStyle.DropDown
            MyBase.OnDropDown(e)
        End Sub


        Protected Overrides Sub OnDropDownClosed(e As System.EventArgs)
            Me.DropDownStyle = ComboBoxStyle.DropDownList

            MyBase.OnDropDownClosed(e)
        End Sub
     


    韩立学
    2012年1月10日 1:13

答案

  • 谢谢回复!

    在不打开列表时,使用ComboBoxStyle.DropDownList ,一是可以避免用户输入非法数据,二是可以直接进行渐进式检索,方便快捷。

    此路可能不通,我只好在KeyUp中,Ctrl+Enter变更ComboBoxStyle了。


    韩立学
    2012年1月12日 1:10

全部回复

  • 为了让用户在打开ComboBox下拉列表时,能够在文本框中输入数据,以便检索列表,我试图在DropDown事件中将DropDownStyle改为ComboBoxStyle.DropDown,但它却导致了列表关闭,从而无法打开列表。怎么办好呢?

        Protected Overrides Sub OnDropDown(e As System.EventArgs)
            Me.DropDownStyle = ComboBoxStyle.DropDown
            MyBase.OnDropDown(e)
        End Sub


        Protected Overrides Sub OnDropDownClosed(e As System.EventArgs)
            Me.DropDownStyle = ComboBoxStyle.DropDownList

            MyBase.OnDropDownClosed(e)
        End Sub
     


    韩立学

     

    听您的描述,直接设置ComboBox的属性DropDownStyle为DropDown

    把以上两个事件拿掉

    应该就可以了

     

     


    2012年1月10日 1:43
  • 谢谢回复!

    你把事情简单化了,在不打开列表情况下,有时是需要ComboBoxStyle.DropDownList的。


    韩立学
    2012年1月10日 1:46
  • 你好, 可以说说为什么在不打开列表的时候一定需要  ComboBoxStyle.DropDownList 吗?因为每次在变更 ComboBoxStyle的时候整个combobox都要重重绘,而当dropdown事件触发的时候,先处理了dropdown,即show出list但是随后马上重绘整个combobox,show出的list也就被destroy了,这样所以你就看不到那个list。
    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2012年1月11日 15:12
    版主
  • 谢谢回复!

    在不打开列表时,使用ComboBoxStyle.DropDownList ,一是可以避免用户输入非法数据,二是可以直接进行渐进式检索,方便快捷。

    此路可能不通,我只好在KeyUp中,Ctrl+Enter变更ComboBoxStyle了。


    韩立学
    2012年1月12日 1:10