0

我试图在粘贴到组合框之前删除换行符并替换为空格,因为它会忽略一行之外的任何内容。我正在尝试这个:

If e.Modifiers = Keys.Control AndAlso e.KeyValue = Keys.V Then Then
            Clipboard.SetText(Regex.Replace(Clipboard.GetText(TextDataFormat.UnicodeText), "\n", " "))
            e.Handled = True
        End If

我在 KeyDown 事件中执行此操作,但它能够捕获 Ctrl 或 V 但不能同时捕获两者。我尝试捕获 CTRL+V 或粘贴到 .NEThttp://social.msdn.microsoft.com/Forums/windows/en-US/096540f4-4ad4-4d24-ae12-cfb3e1b246f3/interceptingoverriding-paste-behavior的文本框中-on-combobox但没有所需的结果。可能是我的代码中缺少一些东西。请帮帮我。

我在调试时使用此 Clipboard.GetText().Replace(vbCrLf, " ") 获得所需的值,但我无法设置它。我尝试使用变量来设置它,但即便如此也没有改变。我还尝试清除剪贴板,然后用这个保存修改后的值的变量进行重置。

我正在使用 Winforms,我尝试了这个,但我的剪贴板仍然没有改变:

Private Const WM_PASTE As Integer = &H302
    Protected Overrides Sub WndProc(ByRef m As Message)
        If m.Msg = WM_PASTE Then
            Dim returnText As String = Nothing
            If (Clipboard.ContainsText()) Then
                returnText = Clipboard.GetText().Replace(vbCrLf, " ")
                Clipboard.Clear()
                Clipboard.SetText(returnText)
            End If
        End If
        MyBase.WndProc(m)
    End Sub
4

3 回答 3

0

这段代码对我有用:

Private Const WM_PASTE As Integer = &H302
    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
        If keyData = (Keys.Control Or Keys.V) Or msg.Msg = WM_PASTE Then
            If (Clipboard.ContainsText()) Then
                Clipboard.SetText(Clipboard.GetText().Replace(vbCrLf, " "))
            End If
        End If
        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function
于 2013-07-31T08:07:17.790 回答
0

仅处理键盘事件以拦截粘贴并不能解决问题,因为粘贴也可以使用鼠标或触摸界面完成。

因此,如果您使用的是 WPF,则只需将 DataObject.Pasting 事件处理程序添加到您的 ComboBox,因此 XAML 中控件的定义将如下所示:

    <ComboBox Name="comboBox1" IsEditable="true" DataObject.Pasting="comboBox1_Pasting" ... />

最后,在您的代码中将其处理为(我在代码隐藏中添加了一个方法,这不如使用命令那么好):

    private void comboBox1_Pasting(object sender, DataObjectPastingEventArgs e)
    {
        // modify the clipboard content here
    }

如果您使用的是 WinForms,请查看此处:挂钩 WinForms TextBox 控件的默认“粘贴”事件

于 2013-07-29T14:13:21.660 回答
-1

使用 keydown 事件并像这样更改剪贴板

Private Sub ComboBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyDown
    If e.KeyCode = Keys.V AndAlso (e.Modifiers And Keys.Control) <> 0 Then
        My.Computer.Clipboard.SetText(My.Computer.Clipboard.GetText().Replace(vbCrLf, " "))
    End If
End Sub

但是这个例子将改变剪贴板的内容。修改它以根据需要粘贴或插入自己

于 2013-07-29T14:00:45.477 回答