2011-02-05 17 views

Odpowiedz

9

Podobnie jak w przypadku kopiowania zwykłego tekstu, należy użyć wartości Clipboard.SetText method. Spowoduje to wyczyszczenie bieżącej zawartości schowka Windows i dodanie do niej określonego tekstu.

Aby skopiować sformatowany tekst, należy użyć parametru overload of that method, który akceptuje parametr TextDataFormat. To pozwala określić format tekstu, który chcesz skopiować do schowka. W takim przypadku należy podać TextDataFormat.Rtf lub tekst składający się z danych w formacie RTF.

Oczywiście, aby to działało, trzeba również użyć kontrolki Rtf property kontrolki RichTextBox, aby wyodrębnić tekst za pomocą formatowania RTF. Nie można użyć standardowego Text property, ponieważ nie zawiera informacji o formatowaniu RTF. Jako dokumentacja ostrzega:

Text nieruchomość nie zwraca żadnych informacji na temat formatowania zastosowanego do treści RichTextBox. Aby uzyskać kody sformatowanego tekstu formatowanego (RTF), należy użyć właściwości Rtf.


Przykładowy kod:

' Get the text from your rich text box 
Dim textContents As String = myRichTextBox.Rtf 

' Copy the text to the clipboard 
Clipboard.SetText(textContents, TextDataFormat.Rtf) 


A gdy tekst jest w schowku można (lub użytkownik aplikacji) wklej go gdziekolwiek chcesz. Aby wkleić tekst programowo, użyjesz parametru Clipboard.GetText method, który akceptuje również parametr TextDataFormat. Na przykład:

' Verify that the clipboard contains text 
If (Clipboard.ContainsText(TextDataFormat.Rtf)) Then 
    ' Paste the text contained on the clipboard into a DIFFERENT RichTextBox 
    myOtherRichTextBox.Rtf = Clipboard.GetText(TextDataFormat.Rtf) 
End If 
+0

Czy kopiuje również obrazy w RichTextBox i jak mogę go przekonwertować na html? –

+0

@abcd: Nie wiem, czy skopiuje obrazy, czy nie. Podejrzewam, że tak nie będzie, ale musisz spróbować i zobaczyć. Jesteś skonfigurowany w środowisku znacznie bardziej sprzyjającym przetestowaniu tego w tym momencie niż ja. Jeśli chcesz używać formatu HTML, zmień 'TextDataFormat.Rtf' na' TextDataFormat.Html'. –

+0

@cody Dzięki Spróbuję tego i zgłoś się ponownie –

2

miałem podobną sytuację, gdzie byłem kopiowania z mojej aplikacji VB NET i próbowała \ r \ n \ r \ n, vbCrLf, Chr (13), Chr (10) , Chr (13) & Chr (10) itd. Nowe linie pojawią się, jeśli wkleję do Worda lub WordPada, ale nie do Notatnika. W końcu użyłem ControlChars.NewLine, gdzie używałem vbCrLf i działało. Podsumowując: Clipboard.SetText ("To jest jedna linia" & ControlChars.Newline & "i ten zły chłopiec jest drugi.") To działa poprawnie. Mam nadzieję, że to działa dla Ciebie!

0

Jest to lepsze rozwiązanie (w oparciu o this answer):

var dto = new DataObject(); 
dto.SetText(richTextBox.SelectedRtf, TextDataFormat.Rtf); 
//Since notepad sux and doesn't understand \n, 
//we need to fix it replacing by Environment.NewLine (\r\n) 
string unformattedText = richTextBox.SelectedText.Replace("\n", Environment.NewLine); 
dto.SetText(unformattedText, TextDataFormat.UnicodeText); 
Clipboard.Clear(); 
Clipboard.SetDataObject(dto); 
1

użyłem tego proste obsługi zdarzeń (które używają metod wbudowanych w kopiuj/wklej z RichTextBox), aby uniknąć sprawdzania TextDataFormat:

private void mnuCopy_Click(object sender, EventArgs e) 
{ 
    txtRichtext.Copy(); 
} 

private void mnuPaste_Click(object sender, EventArgs e) 
{ 
    txtRichtext.Paste(); 
} 
Powiązane problemy