简单的重命名功能
为了便于学习本节的内容,可以先打开CaseStudy目录下的文件“ListView.Table”,并参考该文件名为“示例二十 三”的窗口。
ListView提供了编辑功能,不过很简单,只能编辑标题,一般仅仅用于实现类似“重命名”这样的功能。
ListView默认是不允许编辑的,必须将AllowEdit属性设置为True后,才可以编辑。
如果如果AllowEdit属性为True,有两种方法进入编辑状态:
1、先单击某行,选定此行,然后再单击此行
2、或者执行行的BeginEdit方法。
ListView提供了两个和编辑事件,分别是BeforeEdit和AfterEdit,顾名思义,前者在编辑前触发,后者在编辑后触发,二者的e参数相同,分别为:
Sender: 触发Form的控件
Form: 触发事件的窗口
Row: 正在编辑的行
Index: 正在编辑的行的位置
NewText:编辑后的标题内容
Cancel: 逻辑型,是否取消本次编辑
下面设计一个下图所示的窗口,列出所有员工,并提供更改员工姓名的功能。
设计步骤:
1、窗口的AfterLoad事件代码设置为:
Dim
lvw As
WinForm.ListView
= e.Form.Controls("ListView1")
lvw.StopRedraw()
'暂停绘制
lvw.AllowEdit
= True
'允许编辑标题
lvw.View
= ViewMode.LargeIcon
'显示模式为大图标
lvw.Images.AddLargeImage("Man",
"Man48.ico")
'添加代表男性的一对图标
lvw.Images.AddLargeImage("Woman",
"Woman48.ico")
'添加代表女性的一对图标
For
Each dr
As DataRow
In DataTables("员工").DataRows
'从数据表中提取数据
Dim vr
As WinForm.ListViewRow
= lvw.Rows.Add()
'增加一行
vr.Text
= dr("姓名")
'设置标题
If dr("性别")
= "男" Then
'设置分组
vr.ImageKey
= "Man"
Else
vr.ImageKey
= "Woman"
End If
vr.Tag
= dr
'将DataRow赋值给ListViewRow的Tag属性,方便以后调用.
Next
lvw.ResumeRedraw()
'恢复绘制
2、ListView的BeforeEdit事件代码设置为:
Dim
dr As
DataRow = e.Row.tag
If
dr.Locked
Then
'如果对应的DataRow已经锁定
e.Cancel =
True
'取消本次重命名操作
MessageBox.Show("此员工数据已经锁定,不能重命名!",
"提示",
MessageBoxButtons.OK
,MessageBoxIcon.Information)
End
If
3、ListView的AfterEdit事件代码设置为:
Dim
dr As
DataRow = e.Row.tag
If
e.NewText =
"" Then
Messagebox.Show("员工姓名不能为空!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
e.Cancel =
True
'取消重命名
Else
dr("姓名")
= e.NewText
'修改对应的DataRow的姓名列的值
End
If
4、重命名按钮的代码设置为:
Dim
lvw As
WinForm.ListView
= e.Form.Controls("ListView1")
If
lvw.Current
IsNot Nothing
Then
lvw.Current.BeginEdit()
End
If
提示:
需要注意的时候,如果ListViewRow有多列内容,则只能对第一列进行编辑,因为此时第一列内容就是标题。