Я попробовал решения, опубликованные выше, и они не работали для меня. = (Следуя этой основной идее, хотя (благодаря вышеизложенному) я прибыл сюда, и это, кажется, работает (немного чище). (Работает на Windows Server 2012 R2)
public class MyLabel : System.Windows.Forms.Label
{
private const int WM_LBUTTONDBLCLK = 0x203;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_LBUTTONDBLCLK)
{
string sSaved = Clipboard.GetText();
System.Drawing.Image iSaved = Clipboard.GetImage();
base.WndProc(ref m);
if (iSaved != null) Clipboard.SetImage(iSaved);
if (!string.IsNullOrEmpty(sSaved)) Clipboard.SetText(sSaved);
}
else
{
base.WndProc(ref m);
}
}
}
Необходимо приложить дополнительные усилия для сохранения таких вещей, как скопированные поля Excel и т. П., Хотя принцип будет таким же. Как уже упоминалось, вы можете перебирать буфер обмена для всех доступных форматов (или тех, которые вас интересуют), вставлять эти значения в объект Dictionary и затем восстанавливать их после слов. Текст и фотографии покрывают это для меня, в данном случае.
Одна полезная (и предупреждающая) ссылка для просмотра на эту тему находится здесь:
Как сделать резервную копию и восстановить системный буфер обмена в C #?