private void copy_selection(bool unicode) { try { var selection_len = (int)(TextViewControl.SelectionEnd - TextViewControl.SelectionStart); if (selection_len <= 0) { return; } var char_buffer = IntPtr.Zero; var chars_filled = 0; var eof = false; try { text_provider.GetCharParagraph (TextViewControl.SelectionStart, selection_len, false, out char_buffer, out chars_filled, out eof); var sel_string = string.Empty; sel_string = Marshal.PtrToStringUni(char_buffer, chars_filled); if (unicode) { Clipboard.SetText(sel_string, TextDataFormat.UnicodeText); } else { Clipboard.SetText(sel_string, TextDataFormat.Text); } } finally { if (char_buffer != IntPtr.Zero) { //Marshal.FreeHGlobal(char_buffer); //буфер не надо освобождать } } } catch (Exception ex) { Messages.ShowException(ex); } }