2012-05-01 21 views
0

我在列表框中有一個項目; 我想將它轉換爲PointF,以便我可以將它與pointF列表進行比較。將listBox.SelectedItem轉換爲PointF

例) var selection = listBox3.SelectedItem; //如「{X = 18,Y = 48.10001}」

PointF p1 =(PointF)selection;

//現在,當該項目已被選擇並轉換爲浮動一點,我想搜索,發現它在列表稱爲optFlowPoints,看看是否存在點

的PointF drawPointEst = optFlowPonits.Find(P => p.Equals(選擇));

所以這裏有兩個問題:

  1. 如何將selectedItem轉換爲的PointF
  2. 怎麼寫我的lambda表達式找到匹配
+0

我很驚訝'(的PointF)selection'沒有工作#1的問題。你是否得到一個InvalidCastException?你可以請發佈填充ListBox的代碼嗎? – Andrew

+0

是的,這裏是填充代碼: 列表 temp = new列表(); listBox3.Items.AddRange(temp.ConvertAll(p => p.ToString())。ToArray()); –

+0

是的,我得到invalidCastException說「指定的轉換無效」 –

回答

1

如何將selectedItem轉換爲的PointF:

我想你可以改變你填寫清單的方式。你有沒有試過listBox3.Items.AddRange(temp.Cast<object>().ToArray());?我認爲這應該工作,因爲ListBox爲你調用ToString。 (請參閱http://msdn.microsoft.com/en-us/library/z018s5az.aspx)然後,您的InvalidCastException應該消失,因爲您的ListBox現在包含PointF對象而不是字符串。

如何寫lambda表達式找到匹配:

PointF drawPointEst = optFlowPoints.Find(p => p == selection); 

http://msdn.microsoft.com/en-us/library/system.drawing.pointf.op_equality.aspx

+0

不幸的是,它不工作;不知道爲什麼 列表 temp = new列表(); temp = optFlowPonits.Distinct()。ToList(); listBox3.Items.AddRange(temp.ConvertAll(p => p.ToString())。ToArray()); //////// 它給出以下錯誤: 錯誤\t:'System.Windows.Forms.ListBox.ObjectCollection.AddRange(System.Windows.Forms.ListBox.ObjectCollection)'的最佳重載方法匹配有一些無效的參數 錯誤:\t參數1:不能從轉換 'System.Drawing.PointF []' 到 'System.Windows.Forms.ListBox.ObjectCollection' –

+0

嗯,試試這個來代替:'listBox3.Items.AddRange( temp.Cast ().ToArray());'。希望這會使它使用[this overload](http://msdn.microsoft.com/en-us/library/z018s5az.aspx)。 – Andrew

+0

非常感謝, 錯誤得到了解決,但只是爲了我的信息,你可以請解釋我在哪裏出錯了listBox3.Items.AddRange(temp.ConvertAll(p => p.ToString())。ToArray()) ; –