我對VB.Net相當陌生。VB.Net:wpf窗口的集合
我在寫一個類似於調查的程序。 WPF窗口依次按順序彈出問題。現在,我的客戶要求隨機化某些窗口的訂單。我以爲我可以有一個窗口集合,並以隨機順序呈現這些窗口。但是,我沒有找到任何信息。
有人可以告訴我如何在某種集合中存儲不同的窗口,然後按順序顯示它們嗎?
我對VB.Net相當陌生。VB.Net:wpf窗口的集合
我在寫一個類似於調查的程序。 WPF窗口依次按順序彈出問題。現在,我的客戶要求隨機化某些窗口的訂單。我以爲我可以有一個窗口集合,並以隨機順序呈現這些窗口。但是,我沒有找到任何信息。
有人可以告訴我如何在某種集合中存儲不同的窗口,然後按順序顯示它們嗎?
您應該能夠使用這樣的:(未測試)
Dim l_windows As New List(Of Window)
' However you want to go about populating your list of windows...
l_windows.Add(new Window1())
l_windows.Add(new Window2())
Dim l_random As New Random()
Dim l_randomWindows = From w In l_windows
Select Ordinal = l_random.Next(),
Window = w
Order By Ordinal
Select Window
For Each l_window in l_randomWindows
l_window.Show()
Next
請注意,如果你需要隨機性的統計標準的.NET隨機僅是僞隨機的,和一個糟糕的選擇用途等。(這不是很難找到更好的隨機數生成器,雖然)。
LINQ查詢的說明:
迭代通過l_windows,分配集合中的每個項目w
From w In l_windows
對於每個w
,創建一個新的匿名對象具有兩個屬性:指定一個隨機數Ordinal
並分配給w
Window
。 (編譯器會創建描述的背景這個匿名類型的類,但你永遠都需要直接面對這一切。)
Select Ordinal = l_random.Next(),
Window = w
訂購匿名通過Ordinal
類型的對象。如果兩個Ordinal
是相同的,那麼它將簡單地依次放置(可能基於l_window的原始順序,儘管我沒有測試過它)。
Order By Ordinal
對於剛重新排序列表中的每個匿名類型的對象,選擇分配給窗口屬性的對象。 LINQ很聰明,可以選擇值,而不是創建一個具有單個屬性的匿名類型。
Select Window
的IEnumerable(Of Window)
然後分配給l_randomWindows
。
注意,通過IEnumerable的表示的對象是不是其本身的集合。編譯器實際上會創建一個查詢對象,在您實際嘗試從集合中檢索一個項目(如在
For
循環中)之前,該查詢對象不會被執行。該查詢將一次又一次地執行,每次返回不同的有序結果(因爲每次都會調用l_random.Next()
)。如果你想獲得一個穩定的收集,只需撥打
l_randomWindows.ToList()
或l_randomWindows.ToArray()
並將結果分配給一個變量。
謝謝。我不熟悉LINQ。以上是否意味着: 1.選擇隨機數字和窗口的行 2.按這些隨機數排序這些行 3.按當前順序選擇所有窗口 4.顯示所有窗口。 Can l_random.Next()會產生兩個相同的數字嗎?那麼會發生什麼?謝謝。 – vlr 2013-03-21 21:23:43
@vlr - 查看更新。 – JDB 2013-03-21 21:57:04
太好了,非常感謝。 – vlr 2013-03-21 22:26:03