Как мне скопировать изображение и текст в буфер обмена как один объект?
-
08-07-2019 - |
Вопрос
Я пытаюсь скопировать как изображение из файла, так и текст из файла в буфер обмена.Мое намерение состоит в том, чтобы затем открыть документ Word или электронное письмо Outlook и вставить текст и изображение одной стандартной командой вставки (например, CTRL-V).Я могу сделать и то, и другое по отдельности достаточно легко, но выполнение их обоих за одну операцию, похоже, не работает.
Вот как у меня получилось, что эти две операции работают как отдельные (конечно, только соответствующие строки кода, с удалением try / catch и т.д.):
Добавление изображения в буфер обмена:
...
Bitmap imageToAdd = new Bitmap(imageFilePath);
Clipboard.SetImage(imageToAdd);
...
Добавление текста в буфер обмена:
...
StreamReader rdr = new StreamReader(textFilePath);
string text = rdr.ReadToEnd();
Clipboard.SetText(text);
...
Я использую c # и .net 2.0 framework и ориентируюсь на Windows XP (и, вероятно, Vista в ближайшем будущем).
ТИА
Решение
Я заметил, что можно передать только объект.
В этом случае, когда пользователь нажимает команду для вставки, ваш код может выполнять две функции или одну функцию рекурсивно, и каждый раз получать нужные данные и вставлять их.
Итак, взгляните на зацикливание или рекурсию.
Другие советы
Вы могли бы использовать RTF, который мог бы сочетать текст и графику.Обратите внимание, что вы МОЖЕТЕ одновременно иметь CF_BITMAP и CF_TEXT в буфере обмена.Но это бесполезно.Вы получите текст при вставке в notepad, вы получите растровое изображение при вставке в Paint, и большинство других приложений выберут одно или другое, но никогда оба.Так что это просто академично.Вроде как аккуратно, в том смысле, в каком неисправности транспортера в "Звездном пути" были аккуратными.Но также и грязный.
Может быть, вы могли бы использовать SetDataObject, для которого требуется параметр объекта, вы могли бы использовать массив объектов?
Массив объектов может содержать необходимые вам данные.
Смотрите эту ссылку: