简单的重命名功能

为了便于学习本节的内容,可以先打开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.ListViewRowlvw.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有多列内容,则只能对第一列进行编辑,因为此时第一列内容就是标题。


本页地址:http://www.foxtable.com/webhelp/topics/2829.htm