在C#的列表框中切换DisplayMember

时间:2016-08-13 16:37:54

标签: c# .net windows listbox

我正在尝试在VS 2010中的C#Windows应用程序中切换Listbox中的DisplayMember属性。

我目前有两个按钮可以更改ListBox的DisplayMember,但是只需要一个按钮就可以在两个可用的按钮之间切换。

在一个按钮中,我使用

lstResults.DisplayMember = "Hooks";

另一方面我用

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

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

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

我跟踪过它并且DisplayMember没有响应新的任务。它在代码中没有改变。但它确实在列表框本身中发生了变化。所以我最终将DisplayMember卡在代码中的“Word”中,并在实际显示中停留在“Hooks”中。

为了使事情更具挑战性,原始按钮在此之后将不起作用,直到我删除ListBox并将其添加回表单。我已经清理并重建,没有任何改变。

我也试过

{{1}}

没有区别。

3 个答案:

答案 0 :(得分:0)

这里是简单的解决方案。你只需要一个按钮让我说按钮2,并在下面给出一个点击处理程序

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

            this.comboBox1.DisplayMember = "ID";
            button2.Text = "Show ID";
        } 

其中comboBox1是你的组合框。

答案 1 :(得分:0)

使用Edward Islam的策略,但还有另一个问题以相同的方式锁定ListBox的DisplayMember。 当我附加事件SelectedValueChanged时,除非我将新数据源分配给ListBox,否则DisplayMember不会改变。 列表框使用" 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());
    }
}

答案 2 :(得分:0)

我发现了第二个相关问题的解决方案。 我逐步添加所有语句,直到我得到概率(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>

那很有效。