我对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