在c#的列表框中切换DisplayMember

本文关键字:DisplayMember 列表 | 更新日期: 2023-09-27 18:02:21

我正在尝试在c# Windows应用程序中切换列表框中的DisplayMember属性,在VS 2010中。

我目前有两个按钮来改变ListBox的DisplayMember,但我更希望有一个单独的按钮来切换这两个可用的。

在一个按钮中,我使用
lstResults.DisplayMember = "Word";

另一个用

lstResults.DisplayMember = "Hooks";

效果很好,但是当我尝试使用

If (lstResults.DisplayMember == "Word") 
   lstResults.DisplayMember = "Hooks"; 
else 
   lstResults.DisplayMember = "Word";

我跟踪了它,DisplayMember没有响应新的赋值。它不会在代码中被更改。但它确实在Listbox本身改变。因此,我最终将DisplayMember卡在代码中的"Word"上,并卡在实际显示中的"Hooks"上。

为了使事情变得更具挑战性,原来的按钮将无法工作,直到我删除ListBox并将其添加回表单。我已经清理和重建,没有任何变化。

我也试过

if (lstResults.DisplayMember.Equals("Word"))

在c#的列表框中切换DisplayMember

这里有一个简单的解决方案,你只需要一个按钮,比如button2,并有一个点击处理程序

   if (this.button2.Text == "Show ID")
        {
            this.comboBox1.DisplayMember = "Name";
            button2.Text = "Show Name";
        }
        else
        {
            this.comboBox1.DisplayMember = "ID";
            button2.Text = "Show ID";
        } 

其中comboBox1为组合框

使用Edward Islam的策略,但还有另一个问题,以同样的方式锁定ListBox的DisplayMember。当我附加事件selectedvaluechange时,DisplayMember不会改变,除非我给ListBox分配一个新的数据源。列表框使用"Hooks"作为DisplayMember,但代码显示"Word",我无法更改它。是什么像这样锁定了DisplayMember属性?

private void lstResults_SelectedIndexChanged(object sender, EventArgs e)
{
    int sIndex = lstResults.SelectedIndex + 1;
    int count = lstResults.Items.Count;
    this.statusCount.Text = String.Format("{0} / {1}", sIndex, count);
    string selection = lstResults.Text;
if (sIndex > 0)
    {
        int value = Hoot.ValueCalc.getValue(selection);
        double probable = Hoot.Probability.getProbable(selection);
        int relativeProbable = Hoot.Probability.getRelProbable(selection);
        this.statusWordStats.Text = String.Format("Raw Score: {0}   Probability: {1} (RP: {2})",
            value, probable.ToString("F4"), relativeProbable.ToString());
    }
}

我发现了第二个相关问题的解决方案。我逐渐将所有语句添加回来,直到我得到probability (double probable = Hoot.Probability.getProbable(selection);),这涉及到组合和大量内存。虽然该方法没有改变传递的变量,但我认为内存影响了内容,所以我修改了传递的参数。

我试着改变

string selection = lstResults.Text;

string selection = String.Copy(lstResults.Text);

相同的问题。

然后用

代替
    HookSet selector = (HookSet)lstResults.SelectedItem;
    string selection = String.Copy(selector.Word.ToString());
列表框的数据源是
List<HookSet>