2013-07-29 53 views
0

我想在粘貼到組合框之前刪除換行符並替換爲空白,因爲它忽略了超出行的任何內容。我想這一點:在VB.NET組合框中捕獲ctrl + V

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而不是兩個。我試過Capture CTRL+V or paste in a textbox in .NEThttp://social.msdn.microsoft.com/Forums/windows/en-US/096540f4-4ad4-4d24-ae12-cfb3e1b246f3/interceptingoverriding-paste-behavior-on-combobox,但沒有按照要求的結果。可能是我的代碼中缺少一些東西。請幫助我。

我得到這個Clipboard.GetText()所需的值。替換(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 
+0

你想在c#代碼或vb.net中使用嗎? – Nick

+0

右鍵單擊 - >粘貼會發生什麼? – Pacane

回答

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 
-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 

剪貼板但這個例子是要改變剪貼板的內容。根據需要修改它以粘貼或插入自己

0

僅處理用於截取粘貼的鍵盤事件並不能解決問題,因爲粘貼也可以使用鼠標或觸摸界面完成。

因此,如果您正在使用WPF,那麼只需將DataObject.Pasting事件處理程序添加到您的組合框,所以在XAML控制的定義將看起來像:

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

最後,在你的代碼處理它的(我在這裏增加一個方法來隱藏代碼,這是不一樣漂亮,因爲使用的命令):

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

如果您使用的WinForms,然後看看在這裏:hook on default 「Paste」 event of WinForms TextBox control

+0

我在提及您的鏈接後更新了我的問題。 – Milee