Как извлечь данные из буфера обмена как System.String [] - PullRequest
0 голосов
/ 01 октября 2010

Когда я копирую данные из своего приложения, я пишу простой скрипт на C #, чтобы проверить, какой это тип.Очевидно (и я ожидал этого), это массив строк:

       IDataObject data = Clipboard.GetDataObject();
       Console.WriteLine(data.GetFormats(true)); // writes "System.String[]"

Теперь, когда я извлекаю данные наподобие

      object o = data.GetData( "System.String[]" );

, результирующий объект остается нулевым.

Зачем?Как мне извлечь данные?

Ответы [ 2 ]

3 голосов
/ 01 октября 2010

Вы не должны указывать типы CLR в качестве параметров. Параметр GetData - это просто идентификатор, который может быть любым, но есть некоторые предопределенные форматы , которые используются многими программами.

То, что вы, вероятно, хотите сделать, это использовать DataFormats.Text для извлечения данных в текстовой форме (то есть в строке). Обратите внимание, что это работает только в том случае, если источник содержимого буфера обмена на самом деле предоставил данные в этом формате, но большинство этого делают, поэтому вы должны быть в безопасности.

И, поскольку текст является таким распространенным форматом, существует даже удобный метод для извлечения его в этом формате, называемый Clipboard.GetText ()

РЕДАКТИРОВАТЬ: строка [], которую вы возвращаете при вызове GetFormats, представляет собой просто массив строк со списком всех доступных форматов. Это не фактические данные буфера обмена, а просто говорит, в каком формате вы можете получить их, когда вы делаете obj.GetData(). Посмотрите на этот массив в отладчике или напечатайте его в foreach, чтобы увидеть, есть ли какой-нибудь формат, похожий на массив.

2 голосов
/ 01 октября 2010

data.GetFormats(true) по MSDN возвращает имена форматов данных, которые хранятся в буфере обмена, вместе со всеми форматами данных, в которые эти форматы в буфере обмена могут быть преобразованы.Чтобы получить данные, вам нужно позвонить в data.GetData(dataFormatName) того формата данных, который вы хотите получить.Если вы хотите получить все объекты, вы должны сделать это:

foreach (var item in data.GetFormats(true))
{
   object o = data.GetData(item);
   // do something with o
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...