我正在尝试从另一个线程上的列表框项中读取值。
我试图创建一个新的方法来运行invoke命令,我可以设法将命令发送到列表框,就像通过invoke方法添加但我似乎无法获得响应,我似乎无法得到的值item,我尝试了几种方法,一旦我将它从一个空格改为一个字符串,事情开始变得毛茸茸......
thread t1 = new thread(thethread)
t1.start()
public void thethread()
{
string text = readListBoxSelected(listBox1) + " lala" ;
}
public static string readListBoxSelected(ListBox listbox)
{
if (listbox.InvokeRequired)
{
return (string)listbox.Invoke(
new Func<String>(() => readListBoxSelected(listbox))
);
}
else
{
string varText = listbox.SelectedValue.ToString();
return varText;
}
}
以上是我想要做的一个例子。
这是错误:
System.NullReferenceException是 未按用户代码处理
Message =对象引用未设置为 对象的实例。
来源= * * StackTrace: 在 * * .Form1.readListBoxSelected(ListBox列表框)中的e:\ documents和 settings \ scott \ my documents \ visual 工作室 2010 \项目** * * * \ Form1.cs中:线 133 在 *** .Form1。&lt;&gt; c_ DisplayClass5.b _3() 在e:\ documents和settings \ scott \ my中 文件\视觉工作室 2010 \项目** * * 的 ** \ Form1.cs中:线 127 InnerException:
我想错的正是它所说的“对象引用没有设置为对象的实例”.......所有我的变量似乎被宣布为公平,因为我知道,我该如何纠正此??
我感觉我错误地对待整个事情...... 0_o 提前致谢, 斯科特
答案 0 :(得分:3)
试试这个
public static string readListBoxSelected(ListBox listbox)
{
if (listbox.InvokeRequired)
{
return (string)listbox.Invoke(
new Func<String>(() => readListBoxSelected(listbox))
);
}
else
{
if(istbox.SelectedValue != null)
return listbox.SelectedValue.ToString();
else
return String.Empty
}
}
答案 1 :(得分:1)
代码看起来很好,问题出现在 SelectedValue 上,是 null 。 ???
答案 2 :(得分:0)
谢谢你们,
你在哪里正确,问题是它返回一个空值.. 我非常确定我正确地选择了这个项目,我从未想过这可能是问题所在。
原来问题是两件事:
<强> 1) 我选择项目的方式,我使用listbox.Selecteditem = 1,现在如果我使用listbox.setSelected(1,true)一切都很好:)
和
<强> 2) 我获取项目文本的方式是错误的,listbox.SelectedValue是什么,它dosnt做我们都想象它做...我需要的调用是listbox.Text .........
public static string readListBoxSelected(ListBox listbox) { if (listbox.InvokeRequired) { return (string)listbox.Invoke( new Func<String>(() => readListBoxSelected(listbox)) ); } else if(listbox.Text != null) { return listbox.Text.ToString(); } else return String.Empty; } public void selectListBoxItem(ListBox listbox, int num) { Invoke(new MethodInvoker(delegate { listbox.SetSelected(num,true); })); }
我必须说这是我做过的最令人讨厌的事情......一切都要求我为它编写一个委托/调用方法......一切......如此普遍的东西会被.net动态支持。 ...
似乎没有时间为个人代表写一切......
谢谢大家现在都在工作,昨天我无法预见到这一点, 总体问题是错误的调用,调用很好:)
斯科特
编辑:
确定它返回NULL只是因为listbox.SelectedValue不是真正的调用im后读取selectedvalue(你会认为它是),如果我将它改为listbox1.text一切正常....傻这个.net面向对象的东西,如果我这么说....
我必须说出一个笑话......那善意摧毁了我对面向对象编程的信念。 我知道这不是一个讨论四,但老实说调用SelectedValue.toString()应该做我们都认为它会做的事情....我们需要使用。不要使用.Text得到我们需要的东西0_o ....... ..