首先是选定:
Text1.SelStart = 0 '开始位置
Text1.SelLength = Len(Text1) '结束位置 复制选定内容到剪贴板:
VB.Clipboard.SetText Text1.SelText如果是剪切,加上这一句:
Text1.SelText = ""粘贴,替换选定内容:
Text1.SelText = VB.Clipboard.GetText

解决方案 »

  1.   

    使用剪贴板剪切、复制和粘贴文本
    两个最有用的 Clipboard 方法是 SetText 和 GetText。如图 12.2 所示,用这两个方法向剪贴板和从 Clipboard 传送字符串数据。图 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
      

  2.   

    以上两位写的很好,我也是这么想的。
    www.wlxf.com
      

  3.   

    api,同意楼上的  : )
      

  4.   

    用TextBox实现Cut/Copy/Paste/Undo功能的技巧文档1. 新建一工程,加进一 Class module 并命名为:cTextBoxEdit,然后加入如下代码:Private Declare Function SendMessageLong Lib "USER32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function SendMessageString Lib "USER32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
    Private Const WM_COMMAND = &H111
    Private Const WM_CUT = &H300
    Private Const WM_COPY = &H301
    Private Const WM_PASTE = &H302
    Private Const EM_UNDO = &HC7
    Private Const EM_CANUNDO = &HC6
    Private Const EM_REPLACESEL = &HC2
    Private Declare Function IsClipboardFormatAvailable Lib "USER32" _
          (ByVal wFormat As Long) As Long
    Private Const CF_TEXT = 1
    Private Const CF_UNICODETEXT = 13
    Private Const CF_OEMTEXT = 7Private m_txtThis As TextBoxPublic Property Let TextBox(ByRef txtThis As TextBox)
       Set m_txtThis = txtThis
    End Property
    Public Sub Cut()
       SendMessageLong m_txtThis.hWnd, WM_CUT, 0, 0
    End Sub
    Public Sub Copy()
       SendMessageLong m_txtThis.hWnd, WM_COPY, 0, 0
    End Sub
    Public Sub Paste()
       SendMessageLong m_txtThis.hWnd, WM_PASTE, 0, 0
    End Sub
    Public Sub Undo()
       If (SendMessageLong(m_txtThis.hWnd, EM_CANUNDO, 0, 0) <> 0) Then
          SendMessageLong m_txtThis.hWnd, EM_UNDO, 0, 0
       End If
    End Sub
    Public Property Get CanCut() As Boolean
       CanCut = (Not (m_txtThis.Locked) And m_txtThis.SelLength > 0)
    End Property
    Public Property Get CanCopy() As Boolean
       CanCopy = (m_txtThis.SelLength > 0)
    End Property
    Public Property Get CanPaste() As Boolean
       If IsClipboardFormatAvailable(CF_TEXT) Then
          CanPaste = True
       ElseIf IsClipboardFormatAvailable(CF_UNICODETEXT) Then
          CanPaste = True
       ElseIf IsClipboardFormatAvailable(CF_OEMTEXT) Then
          CanPaste = True
       End If
    End Property
    Public Property Get CanUndo() As Boolean
       CanUndo = (SendMessageLong(m_txtThis.hWnd, EM_CANUNDO, 0, 0) <> 0)
    End Property
    Public Sub ReplaceSelection(ByRef sText As String, Optional ByVal bAllowUndo = True)
       Dim lR As Long
       If (m_txtThis.SelLength > 0) Then
          lR = Abs(bAllowUndo)
          SendMessageString m_txtThis.hWnd, EM_REPLACESEL, lR, sText
       End If
    End Sub
    Public Sub Delete(Optional ByVal bAllowUndo = True)
       Dim lR As Long
       SendMessageString m_txtThis.hWnd, EM_REPLACESEL, lR, vbNullChar
    End Sub2. 在Form 中加上一Textbox,并设其 MultiLine 属性为 True 3. 编写一如下菜单            Caption Name Index Shortcut   
      &Edit mnuEditTOP       
      &Undo mnuEdit 0 Ctrl+Z   
      - mnuEdit 1     
      Cu&t mnuEdit 2 Ctrl+X   
      &Copy mnuEdit 3 Ctrl+C   
      &Paste mnuEdit 4 Ctrl+V   
      &Delete mnuEdit 5 Del 4. 将如下代码加入Form:Option ExplicitPrivate m_c As cTextBoxEditPrivate Sub Form_Load()
       Set m_c = New cTextBoxEdit
       m_c.TextBox = Text1
    End SubPrivate Sub mnuEdit_Click(Index As Integer)
       Select Case Index
           Case 0
              m_c.Undo
         Case 2
              m_c.Cut
           Case 3
                  m_c.Copy
           Case 4
              m_c.Paste
           Case 5
                  m_c.Delete
       End Select
    End SubPrivate Sub mnuEditTOP_Click()
       mnuEdit(0).Enabled = m_c.CanUndo   mnuEdit(2).Enabled = m_c.CanCut
       mnuEdit(3).Enabled = m_c.CanCopy
       mnuEdit(4).Enabled = m_c.CanPaste
       mnuEdit(5).Enabled = m_c.CanCutEnd Sub
    5.按 [F5] 吧!