可将此代码段当作对控件的任何其它引用一样使用。如果知道该控件是一个文本框,就可引用支持文本框的任何属性,包括 Text、SelText 和 SelLength。下列代码假定活动的控件是一个文本框,且使用了 SelText 属性: Private Sub mnuCopy_Click () Clipboard.Clear Clipboard.SetText Screen.ActiveControl.SelText End SubPrivate Sub mnuCut_Click () Clipboard.Clear Clipboard.SetText Screen.ActiveControl.SelText Screen.ActiveControl.SelText = "" End SubPrivate Sub mnuPaste_Click () Screen.ActiveControl.SelText = Clipboard.GetText() End Sub 可用 GetFormat 方法来确认剪贴板上的数据是否具有特定的格式。例如,可根据 Clipboard 上的数据是否与当前活动控件兼容,来决定使“粘贴”命令无效。 Private Sub mnuEdit_Click () '单击事件,弹出“编辑”菜单。 mnuCut.Enabled = True mnuCopy.Enabled = True mnuPaste.Enabled = False If TypeOf Screen.ActiveControl Is TextBox Then If Clipboard.GetFormat(vbCFText) Then mnuPaste.Enabled = True ElseIf TypeOf Screen.ActiveControl Is ComboBox Then If Clipboard.GetFormat(vbCFText) Then mnuPaste.Enabled = True ElseIf TypeOf Screen.ActiveControl Is ListBox Then If Clipboard.GetFormat(vbCFText) Then mnuPaste.Enabled = True ElseIf TypeOf Screen.ActiveControl Is PictureBox _ Then If Clipboard.GetFormat(vbCFBitmap) Then mnuPaste.Enabled = True Else '不能从其它类型的控件剪切或复制。 mnuCut.Enabled = False mnuCopy.Enabled = False End If End Sub
图 12.2 用 SetText 和 GetText 方法向剪贴板和从剪贴板传送数据
SetText 将文本复制到 Clipboard 上,替换先前存储在那里的文本。可将 SetText 作为一条语句使用。其语法如下:
Clipboard.SetText data[, format]
GetText 返回存储在 Clipboard 上的文本。也可将它作为函数使用:
destination = Clipboard.GetText()
将 SetText 和 GetText 方法,和“使用选定文本”中介绍的选择属性结合起来使用,可容易地编写文本框的“复制”,“剪切”和“粘贴”命令。下列一些事件过程,为以 mnuCopy,mnuCut 和 mnuPaste 命名的控件,实现了这些命令:
Private Sub mnuCopy_Click ()
Clipboard.Clear
Clipboard.SetText Text1.SelText
End SubPrivate Sub mnuCut_Click ()
Clipboard.Clear
Clipboard.SetText Text1.SelText
Text1.SelText = ""
End SubPrivate Sub mnuPaste_Click ()
Text1.SelText = Clipboard.GetText()
End Sub
注意 如果它们都是菜单控件时,示例会工作得最好,这是因为 Text1 有焦点时可使用菜单。
要注意的是 Copy 和 Cut 这两个过程,都要先用 Clear 方法将 Clipboard 清空。(因为可能要以几种不同的格式在 Clipboard 上放置数据,所以 Clipboard 不应自动清空。这在本章后面的“在 Clipboard 上使用多种格式”中有详细描述。然后,Copy 和 Cut 这两个过程,都用下面的语句将 Text1 中所选择的文本复制到 Clipboard 上:
Clipboard.SetText Text1.SelText
在“粘贴”命令中,GetText 方法将返回 Clipboard 上当前的文本字符串。然后用一条赋值语句将该字符串复制到文本框的指定位置 (Text1.SelText)。如果当前没有被选定的文本,则 Visual Basic 将该文本放置在文本框中插入点处:
Text1.SelText = Clipboard.GetText()
该代码假定全部文本被传送到或传送出文本框 Text1,而用户可在 Text1 和其它窗体上的控件之间进行复制、剪切和粘贴。
由于 Clipboard 是被整个环境所共享的,所以在 Text1 和任何正在使用剪贴板的应用程序之间,也能传送文本。
使用 ActiveControl 属性
如果希望“复制”、“剪切”和“粘贴”命令能和任何有焦点的文本框一起工作,可使用 Screen 对象的 ActiveControl 属性。下列代码给任何有焦点的控件提供了一个引用:
Screen.ActiveControl
可将此代码段当作对控件的任何其它引用一样使用。如果知道该控件是一个文本框,就可引用支持文本框的任何属性,包括 Text、SelText 和 SelLength。下列代码假定活动的控件是一个文本框,且使用了 SelText 属性:
Private Sub mnuCopy_Click ()
Clipboard.Clear
Clipboard.SetText Screen.ActiveControl.SelText
End SubPrivate Sub mnuCut_Click ()
Clipboard.Clear
Clipboard.SetText Screen.ActiveControl.SelText
Screen.ActiveControl.SelText = ""
End SubPrivate Sub mnuPaste_Click ()
Screen.ActiveControl.SelText = Clipboard.GetText()
End Sub
可用 GetFormat 方法来确认剪贴板上的数据是否具有特定的格式。例如,可根据 Clipboard 上的数据是否与当前活动控件兼容,来决定使“粘贴”命令无效。
Private Sub mnuEdit_Click ()
'单击事件,弹出“编辑”菜单。
mnuCut.Enabled = True
mnuCopy.Enabled = True
mnuPaste.Enabled = False
If TypeOf Screen.ActiveControl Is TextBox Then
If Clipboard.GetFormat(vbCFText) Then mnuPaste.Enabled = True
ElseIf TypeOf Screen.ActiveControl Is ComboBox Then
If Clipboard.GetFormat(vbCFText) Then mnuPaste.Enabled = True
ElseIf TypeOf Screen.ActiveControl Is ListBox Then
If Clipboard.GetFormat(vbCFText) Then mnuPaste.Enabled = True
ElseIf TypeOf Screen.ActiveControl Is PictureBox _
Then
If Clipboard.GetFormat(vbCFBitmap) Then mnuPaste.Enabled = True
Else
'不能从其它类型的控件剪切或复制。
mnuCut.Enabled = False
mnuCopy.Enabled = False
End If
End Sub
注意 也可能要检查使用常数 vbCFPalette、vbCFDIB 和 vbCFMetafile 的其它数据格式。如果要用 Clipboard 操作来替换图片的调色板,最好要求 Clipboard 是“vbCFBitmap”,而不是“vbCFDIB”。关于使用调色板的详细内容,请参阅本章后面的“使用 256 色”。
详细信息 请参阅《联机手册》中《语言参考》的“剪贴板对象”。