0

行を超えたものは無視されるため、comboBox に貼り付ける前に、改行を削除して空白に置き換えようとしています。私はこれを試しています:

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 をキャプチャするか、.NET のテキスト ボックスに貼り付けてました。 -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 に答える