Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Добавление данных в буфер обмена




Выполнение операции перетаскивания между приложениями

Выполнение операции перетаскивания в Windows Forms

Операции перетаскивания и поддержка буфера обмена

Упорядочение дочерних форм интерфейса MDI

Приложения могут иметь команды меню, такие как "Мозаика", "Каскадом" и "Расположить", которые относятся к открытым дочерним MDI-формам. Можно также использовать метод LayoutMdi с перечислением MdiLayout для изменения порядка дочерних форм в родительской форме MDI.

В методе MdiLayout можно использовать одно из четырех различных значений перечисления LayoutMdi. С помощью значений перечисления можно представить дочерние формы в виде каскада, вертикально или горизонтально без перекрытия или в виде значков форм, расположенных вдоль нижней части MDI-формы.

Часто эти методы используются в качестве обработчиков событий, вызываемых событием Click пункта меню. Таким образом, пункт меню с текстом "Cascade Windows" может оказывать желаемое воздействие на дочерние MDI-формы.

Чтобы упорядочить дочерние формы в методе используйте метод LayoutMdi для задания перечисления MdiLayout для родительской MDI-формы. В следующем примере для дочерних окон родительской MDI-формы (Form1) используется параметр Cascade перечисления MdiLayout. Перечисление используется в коде во время обработки события Click пункта меню Cascade Windows.

protected void CascadeWindows_Click(object sender, System.EventArgs e){ this.LayoutMdi(System.Windows.Forms.MdiLayout.Cascade);}

Пользовательские операции перетаскивания в приложении Windows можно включить, обрабатывая последовательность событий, которая, как правило, включает события DragEnter, DragLeave и DragDrop. Можно также реализовать поддержку вырезания/копирования/вставки и передачу данных пользователя в буфер обмена в Windows-приложения с помощью вызова простых методов.

Для выполнения операций перетаскивания в приложениях Windows необходимо обрабатывать последовательность событий, главным образом события DragEnter, DragLeave и DragDrop. Перетаскивание можно с легкостью организовать при работе со сведениями, доступными через аргументы этих событий.

Все операции перетаскивания начинаются с переноса данных. Функциональные возможности, позволяющие собрать данные при начале перетаскивания, реализуются в методе DoDragDrop. В следующем примере событие MouseDown используется для начала операции перетаскивания, так как это первое, что делает интуитивно пользователь (большинство операций перетаскивания начинаются с отпущенной кнопкой мыши). Однако следует учесть, что для инициализации процедуры перетаскивания может использоваться любое событие.

Некоторые элементы управления имеют специальные события, относящиеся к перетаскиванию. Например, элементы управления ListView и TreeView имеют событие ItemDrag.

Чтобы начать операцию переноса, выполните следующие действия. В событии MouseDown для элемента управления, с которого начнется операция переноса, используйте метод DoDragDrop, чтобы определить данные для переноса и действия, разрешенные при переносе.

В следующем примере показан способ инициализации операции переноса. Элементом управления, в котором начинается перетаскивание, является Button, перетаскиваемыми данными является строка, представляющая свойство Text элемента управления Button, а в качестве разрешенных действий устанавливаются копирование и перемещение.

private void button1_MouseDown(object sender,System.Windows.Forms.MouseEventArgs e){ button1.DoDragDrop(button1.Text, DragDropEffects.Copy | DragDropEffects.Move);}

В качестве параметра метода DoDragDrop можно использовать любые данные. В предыдущем примере использовалось свойство Text элемента управления Button (вместо того чтобы жестко запрограммировать значение или получить значение из набора данных), поскольку это свойство было связано с местом расположения данных, которые требовалось перенести (элемент управления Button). Помните об этом при реализации операций перетаскивания в приложениях Windows.

Во время выполнения операции перетаскивания можно обрабатывать событие QueryContinueDrag, которое "запрашивает разрешение" системы на продолжение операции перетаскивания. При обработке этого метода удобно также вызывать методы, влияющие на операцию перетаскивания, таких как развертывание объекта TreeNode в элементе управления TreeView, когда курсор находится над ним

После начала операции переноса данных из определенной области в форме Windows Form или из элемента управления, необходимо эти данные куда-либо поместить. При прохождении курсора через область формы или элемент управления, которые правильно настроены для освобождения данных, вид курсора изменится. Любая область внутри формы Windows Form или элемента управления может быть настроена для приема перетащенных данных путем установки свойства AllowDrop и обработки событий DragEnter и DragDrop.

Чтобы осуществить освобождение данных, выполните следующие действия. Задайте значение "true" свойству AllowDrop. Убедитесь, что перетаскиваемые данные являются допустимым типом для события DragEnter элемента управления, в который осуществляется перетаскивание (в данном случае этим типом является Text). Затем в коде для эффекта, возникающего после освобождения данных, задайте значение перечисления DragDropEffects.

private void textBox1_DragEnter(object sender,System.Windows.Forms.DragEventArgs e){ if (e.Data.GetDataPresent(DataFormats.Text)) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None;}

Можно определить собственные форматы DataFormats, указав собственный объект в качестве параметра Object метода SetData. Убедитесь, что при выполнении этого действия указанный объект можно сериализовать.

В событии DragDrop для элемента управления, в котором будут размещены данные, используйте метод GetData для получения перетаскиваемых данных. В показанном ниже примере элемент управления TextBox является элементом управления, в который переносятся данные (в котором будет выполнено освобождение данных). В этом коде свойство Text элемента управления TextBox устанавливается равным перетаскиваемым данным.

private void textBox1_DragDrop(object sender,System.Windows.Forms.DragEventArgs e){ textBox1.Text = e.Data.GetData(DataFormats.Text).ToString();}

Кроме того, можно работать со свойством KeyState: в зависимости от клавиш, нажатых во время операции перетаскивания, происходят определенные действия (например, при нажатии клавиши CTRL обычно происходит копирование переносимых данных).

Выполнение операций перетаскивания между приложениями не отличается от выполнения этого действия в одном приложении, пока поведение участвующих приложений соответствует "контракту", установленному между свойствами AllowedEffect и Effect.

Ниже на примере созданного пользователем приложения Windows и встроенного в операционную систему Windows текстового редактора WordPad показана операция перетаскивания между приложениями. В приложении WordPad имеется определенный набор допустимых действий с перетаскиваемым текстом; приложение Windows, которое создается с помощью кода, будет использовать эти действия для успешного завершения операций перетаскивания.

Чтобы осуществить процедуру перетаскивания между приложениями, выполните следующие действия.

§ Создайте новое приложение Windows.

§ Добавьте элемент управления TextBox в форму.

§ Настройте элемент управления TextBox для получения перетащенных данных.

§ Запустите приложение Windows и редактор WordPad. WordPad — это текстовый редактор операционной системы Windows, который поддерживает операции перетаскивания. Чтобы его запустить, можно нажать кнопку Пуск, выбрать Выполнить, ввести WordPad в текстовое поле диалогового окна Запуск программы и нажать кнопку OK.

§ Открыв WordPad, наберите в нем произвольную строку текста.

§ Используя мышь, выделите текст и перетащите его в элемент управления TextBox приложения Windows.

Обратите внимание, что, когда указатель мыши находится над элементом управления TextBox (и, следовательно, инициируется событие DragEnter), курсор изменяется и можно освободить выделенный текст в элемент управления TextBox. Кроме того, можно настроить элемент управления TextBox таким образом, чтобы разрешить перетаскивание текста в приложение WordPad.

Класс Clipboard предоставляет методы, которые можно использовать для взаимодействия с функцией буфера обмена операционной системы Windows. Многие приложения используют буфер обмена в качестве временного хранилища данных. Например, текстовые процессоры используют буфер обмена во время операций вырезания и вставки. Буфер обмена также полезен для передачи данных из одного приложения в другое.

При добавлении данных в буфер обмена можно указать формат данных таким образом, чтобы другие приложения могли распознать данные, если они могут использовать этот формат. Можно также добавить данные в буфер обмена в нескольких различных форматах, чтобы увеличить количество других приложений, которые потенциально могут использовать данные.

Формат буфера обмена является строкой, которая определяет формат таким образом, чтобы приложение, использующее этот формат, могло получать связанные данные. Класс DataFormats предоставляет предварительно определенные имена форматов для использования. Можно также использовать собственные имена форматов или использовать тип объекта в качестве его формата.

Чтобы добавить данные в буфер обмена в одном или нескольких форматах, используйте метод SetDataObject. Этому методу можно передать любой объект, но для добавления данных в нескольких форматах необходимо сначала добавить данные в отдельный объект, предназначенный для работы с несколькими форматами данных. Обычно данные добавляются к объекту DataObject, но можно использовать любой тип, реализующий интерфейс IDataObject.

В.NET Framework, версия 2.0 можно добавить данные непосредственно в буфер обмена с помощью новых методов, позволяющих упростить основные задачи при работе с буфером обмена. Используйте эти методы при работе с данными в одном общем формате, такими как текст. Все приложения Windows используют один буфер обмена. Поэтому содержимое буфера обмена может изменяться при переходе к другому приложению.

Класс Clipboard может использоваться только в потоках в режиме однопотокового подразделения. Чтобы использовать этот класс, убедитесь, что используемый метод Main помечен атрибутом STAThreadAttribute.

Для помещения в буфер обмена объект должен быть сериализуемым. Чтобы сделать тип сериализуемым, его необходимо пометить атрибутом SerializableAttribute. Если методу буфера обмена передается не сериализуемый объект, метод завершится неудачей без создания исключения.

Чтобы добавить данные в буфер обмена в одном общем формате, выполните следующие действия.

Используйте метод SetAudio, SetFileDropList, SetImage или SetText. Эти методы доступны только в.NET Framework, версия 2.0

// Demonstrates SetAudio, ContainsAudio, and GetAudioStream.public System.IO.Stream SwapClipboardAudio(System.IO.Stream replacementAudioStream){ System.IO.Stream returnAudioStream = null; if (Clipboard.ContainsAudio()) { returnAudioStream = Clipboard.GetAudioStream(); Clipboard.SetAudio(replacementAudioStream); } return returnAudioStream;} // Demonstrates SetFileDropList, ContainsFileDroList, and GetFileDropListpublic System.Collections.Specialized.StringCollection SwapClipboardFileDropList(System.Collections.Specialized.StringCollection replacementList){ System.Collections.Specialized.StringCollection returnList = null; if (Clipboard.ContainsFileDropList()) { returnList = Clipboard.GetFileDropList(); Clipboard.SetFileDropList(replacementList); } return returnList;} // Demonstrates SetImage, ContainsImage, and GetImage.public System.Drawing.Image SwapClipboardImage(System.Drawing.Image replacementImage){ System.Drawing.Image returnImage = null; if (Clipboard.ContainsImage()) { returnImage = Clipboard.GetImage(); Clipboard.SetImage(replacementImage); } return returnImage;} // Demonstrates SetText, ContainsText, and GetText.public String SwapClipboardHtmlText(String replacementHtmlText){ String returnHtmlText = null; if (Clipboard.ContainsText(TextDataFormat.Html)) { returnHtmlText = Clipboard.GetText(TextDataFormat.Html); Clipboard.SetText(replacementHtmlText, TextDataFormat.Html); } return returnHtmlText;}

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

Используйте метод SetData с именем пользовательского формата. Этот метод доступен только в.NET Framework, версия 2.0. Можно также использовать предварительно определенные имена форматов с помощью метода SetData.

// Demonstrates SetData, ContainsData, and GetData// using a custom format name and a business object.public Customer TestCustomFormat{ get { Clipboard.SetData("CustomerFormat", new Customer("Customer Name")); if (Clipboard.ContainsData("CustomerFormat")) { return Clipboard.GetData("CustomerFormat") as Customer; } return null; }}... [Serializable]public class Customer{ private string nameValue = string.Empty; public Customer(String name) { nameValue = name; } public string Name { get { return nameValue; } set { nameValue = value; } }}

Чтобы добавить данные в буфер обмена в нескольких форматах, выполните следующие действия. Используйте метод SetDataObject и передайте ему объект DataObject, содержащий данные. Необходимо использовать этот метод для добавления данных в буфер обмена для более ранних версий, чем.NET Framework 2.0.

// Demonstrates how to use a DataObject to add// data to the Clipboard in multiple formats.public void TestClipboardMultipleFormats(){ DataObject data = new DataObject(); // Add a Customer object using the type as the format. data.SetData(new Customer("Customer as Customer object")); // Add a ListViewItem object using a custom format name. data.SetData("CustomFormat", new ListViewItem("Customer as ListViewItem")); Clipboard.SetDataObject(data); DataObject retrievedData = (DataObject)Clipboard.GetDataObject(); if (retrievedData.GetDataPresent("CustomFormat")) { ListViewItem item = retrievedData.GetData("CustomFormat") as ListViewItem; if (item!= null) { MessageBox.Show(item.Text); } } if (retrievedData.GetDataPresent(typeof(Customer))) { Customer customer = retrievedData.GetData(typeof(Customer)) as Customer; if (customer!= null) { MessageBox.Show(customer.Name); } }}... [Serializable]public class Customer{ private string nameValue = string.Empty; public Customer(String name) { nameValue = name; } public string Name { get { return nameValue; } set { nameValue = value; } }}



Поделиться с друзьями:


Дата добавления: 2013-12-12; Просмотров: 379; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.029 сек.