帮助是写在窗口AfterLoad事件,但这样显然不合适了,那要写在哪个事件中呢,LISTVIEW申明的变量又多.
窗口的AfterLoad事件代码设置为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
Dim lvw1 As WinForm.ListView = e.Form.Controls("ListView1") '员工列表 Dim lvw2 As WinForm.ListView = e.Form.Controls("ListView2") '活动一参与者列表 Dim lvw3 As WinForm.ListView = e.Form.Controls("ListView3") '活动二参与者列表 Dim
lvws() As
Winform.ListView = {lvw1,lvw2,lvw3}
'看看我们是怎样批量设置某组控件属性的 For
Each
lvw
As
WinForm.ListView
In
lvws lvw.View = ViewMode.List lvw.AllowDrag = True lvw.AllowDrop = True lvw.Images.AddSmallImage("Man", "Man.ico") '添加代表男性的一对图标 lvw.Images.AddSmallImage("Woman", "Woman.ico") '添加代表女性的一对图标 Next For
Each
dr
As
DataRow
In
DataTables("员工").Select("","性别") '列出所有员工 Dim
vr
As
WinForm.ListViewRow = lvw1.Rows.Add() vr.Text = dr("姓名") vr.Name = dr("姓名") '将ListViewRow的Name属性设置为员工姓名 If
dr("性别") = "男"
Then vr.ImageKey = "Man" Else vr.ImageKey = "Woman" End
If Next Dim nms() As String = DataTables("活动").DataRows(0)("参与者").Split(",") '列出活动一参与者 For Each nm As String In nms If nm > "" Then Dim vr As WinForm.ListViewRow = lvw2.Rows.Add() vr.Text = nm vr.Name = nm vr.ImageKey = lvw1.Rows(nm).ImageKey '从员工列表(ListView1)获取此员工的图标键值 End If Next nms = DataTables("活动").DataRows(1)("参与者").Split(",") '列出活动二参与者 For Each nm As String In nms If nm > "" Then Dim vr As WinForm.ListViewRow = lvw3.Rows.Add() vr.Text = nm vr.Name = nm vr.ImageKey = lvw1.Rows(nm).ImageKey '从员工列表(ListView1)获取此员工的图标键值 End If Next |
上面的代码中,我首先请你留意第4行到第11行的代码,当我们需要对一组控件进行相同的设置时,可以用这种方法减少代码量;其次留意第15行代码,此行代码将员工列表(ListView1)中的行的Name属性设置为对应员工的姓名,这样我们可以在28、37这两行代码通过员工姓名获取ListView1中这个员工对应的行,然后获取此行的ImageKey属性,并赋值给活动参与者(ListView2和ListView3)中对应行的ImageKey属性。
2、ListView2(活动一参与者)的BeforeDropRow事件代码设置为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Dim
lvw
As
WinForm.ListView = e.Sender If
lvw.Rows.Count >= 3 AndAlso
e.Source.Name <> lvw.Name
Then
'如果已经有三人,而且是从其他ListView拖动过来. Messagebox.show("每项活动最多允许三人参与!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) e.Cancel = True '取消本次拖动 Return End
If If
e.Source.Name = "ListView1"
'如果是从员工列表中拖过来的行 e.Delete = False
'不要删除原来的项目 End
If Dim
itm
As
WinForm.ListViewRow = e.Source.Rows(e.OldIndex) '获取要拖动过来的行 If
e.Source.Name <> e.Sender.Name
Then
'如果是从其他ListView中拖动过来的 If
e.Sender.Rows.Contains(itm.Name) '判断活动一是否已经包括此员工 MessageBox.Show("此员工已经报名参加活动一,无需重复报名!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) e.Cancel = True '取消本次拖动 End
If End
If |
[此贴子已经被作者于2014-3-21 22:02:57编辑过]