【问题标题】:VB Radio button and Combo Box FlashVB 单选按钮和组合框 Flash
【发布时间】:2015-11-08 08:48:40
【问题描述】:

我编写了一小段代码来在选择单选按钮时更改组合框的显示成员。我遇到的唯一问题是,当我在单选按钮之间切换时,组合框会消失,然后一秒钟后又回来,有没有办法解决这个问题。

Private Sub SearchOptionChange(sender As Object, e As EventArgs) Handles RBExchange.CheckedChanged, RBPostcode.CheckedChanged

    Dim RB As RadioButton = CType(sender, RadioButton)
    If RB.Name = "RBExchange" AndAlso RB.Checked Then
        ComboBox1.DisplayMember = "Exchange"
        ComboBox1.Text = ""

    ElseIf RB.Name = "RBPostcode" AndAlso RB.Checked Then
        ComboBox1.DisplayMember = "Postcode"
        ComboBox1.Text = ""

    End If


End Sub

【问题讨论】:

  • 您可能想要显示代码,否则我们会猜测您在做什么。根据How to Ask
  • 我已添加代码
  • 数据源是什么?一秒钟(如果是字面意思)听起来很长,但是更改 DisplayMember 确实意味着 LB 必须重新绘制可见内容。 DataSource 中有多少个元素?此外,如果您使用 RB 的 TAG 属性来存储成员字符串,则可以将该代码块减少到 1-2 行。

标签: vb.net combobox radio-button


【解决方案1】:

我使用以下方法重现了您的问题,并且仅在 DropDownStyle 设置为 Simple 时才会发生。因此,如果可能,请将 DropDownStyle 设置为 DropDown。

注意我使用了 5,000 个项目并且没有闪烁,跳到 10,000 个并且闪烁在那里,所以除了上面的建议之外,如果可能的话,如果业务逻辑允许,请考虑减少 ComboBox 中的项目数。

使用测试并注意,当 DropDownStyle 设置为 Simple 时,即使 SuspendLayout 和 ResumeLayout 也无济于事。

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) _
        Handles MyBase.Load

        Dim ItemList As New List(Of item)

        For x As Integer = 0 To 50000

            ItemList.Add(New item With
                         {
                             .Exchange = "E" & x.ToString,
                             .PostCode = "P" & x.ToString
                         })
        Next

        ComboBox1.DisplayMember = "Exchange"
        ComboBox1.DataSource = ItemList

    End Sub
    Private Sub RBExchange_CheckedChanged(sender As Object, e As EventArgs) _
        Handles RBExchange.CheckedChanged, RBPostcode.CheckedChanged

        Dim RB As RadioButton = CType(sender, RadioButton)
        RB.SuspendLayout()
        If RB.Name = "RBExchange" AndAlso RB.Checked Then
            ComboBox1.DisplayMember = "Exchange"
            ComboBox1.Text = ""

        ElseIf RB.Name = "RBPostcode" AndAlso RB.Checked Then
            ComboBox1.DisplayMember = "Postcode"
            ComboBox1.Text = ""
        End If
        RB.ResumeLayout()
    End Sub
End Class
Public Class item
    Public Property Exchange
    Public Property PostCode
End Class

【讨论】:

  • 谢谢,问题好像已经解决了。
猜你喜欢
  • 2013-10-17
  • 2016-01-15
  • 2011-11-03
  • 1970-01-01
  • 2018-06-18
  • 1970-01-01
  • 2011-04-10
  • 2018-01-06
  • 1970-01-01
相关资源
最近更新 更多