2010-10-01 7 views
0

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

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

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

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

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

Почему? Как я могу извлечь данные?

+0

Должно работать и работает на моей машине. Опубликуйте фрагмент, который показывает, как вы помещаете его в буфер обмена. –

ответ

3

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

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

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

EDIT: Строка [] вы получите обратно, когда вы звоните GetFormats просто массив строк перечисляя все доступные форматы. Это не фактические данные буфера обмена, это просто говорит вам, какой формат вы можете получить, когда вы делаете obj.GetData(). Посмотрите на этот массив в отладчике или распечатайте его в foreach, чтобы увидеть, есть ли какой-либо формат, похожий на массив.

+0

Я знаю, что данные копируются из диапазона ячеек сетки. Вот почему я твердо верю в формат 'String []'. Я изучаю причину, почему копирование этих конкретных ячеек не работает, в то время как другие делают. – xtofl

2

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

foreach (var item in data.GetFormats(true)) 
{ 
    object o = data.GetData(item); 
    // do something with o 
} 
Смежные вопросы