Копировать текст и данные приложения в буфер обмена - PullRequest
0 голосов
/ 24 февраля 2019

Для проекта, над которым я сейчас работаю, мне нужно в определенной степени использовать буфер обмена.

Что мне нужно:

Сохранить текст и некоторые дополнительные приложения, специфичныеданные в буфер обмена.Предполагается, что текст может быть использован с помощью CTRL + V в других приложениях, в то время как данные приложения, как правило, должны быть опущены, поскольку они в основном используются для ссылок на вещи (например, кавычки и т. Д.)

Что я пробовал:

Копирование пользовательского объекта в буфер обмена и перезапись ToString-метода, который был немного наивным, чтобы думать, что он будет работать

[Serializable]
public class TestData {
    public string txt;
    public string additionalStuffs;

    public override string ToString() {
        return txt;
    }
}
Clipboard.SetData( "TestData", new TestData() { txt = "This is a text", additionalStuffs = "Stuffs" } );

Теперь мне нужен txt длябыть вставленным в другие приложения в виде строки, в то время как другие данные игнорируются, если они не опубликованы в моем приложении.Ради читабельности и простоты использования для пользователя.

Кто-нибудь из вас может объяснить, как мне нужно подойти к этой проблеме?Есть ли способ сделать это?

1 Ответ

0 голосов
/ 24 февраля 2019

Хорошо, еще немного проб и ошибок с использованием документации, и я на самом деле нашел решение.

Для всех, у кого была такая же проблема: уловка заключается в использовании объекта DataObject, подобного следующему:

[Serializable]
public class TestData {
   public string Whatever;
}

IDataObject dataObject = new DataObject();
dataObject.SetData( "System.String", "Test" );
dataObject.SetData( "Text", "Test" );
dataObject.SetData( "UnicodeText", "Test" );
dataObject.SetData( "OEMText", "Test" );

dataObject.SetData( "TestData", new TestData() { Whatever = "NONONONONO", } );

Clipboard.SetDataObject( dataObject );

Используя эту конструкцию, вы можете установить текст, используя несколько «типов данных», поэтому для любого приложения, в которое вы хотите вставить, требуется указание значения.Таким образом, при вставке отображается только текст, но скрыты внутри дополнительные данные.

Извините за постановку вопроса без исследования до конца.Хорошего дня!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...