我正在尝试在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}}
没有区别。
答案 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>
那很有效。