Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Вставка данных из буфера Clipboard




Копирование данных в буфер Clipboard

Передача данных через буфер Clipboard

В большинстве случаев для работы с документами, отображаемыми в MDI-окнах, используется одно меню — главное меню приложений. Например, с помощью строк New и Close меню Fileпользователь нашего приложения MDIApp может, соответственно, создавать и уничтожатьMDI-окна.

Теперь мы реализуем операцию обмена данных через универсальный буфер обмена Clipboard, для которого в нашем приложении предусмотрено меню Edit. Строка Copyэтого меню должна копировать данные из активного MDI-окна в буфер Clipboard, а строкаPaste — вставлять данные из буфера Clipboard в активное MDI-окно. Активным окном здесь называется MDI-окно, имеющее фокус ввода.

Вначале мы реализуем операцию копирования выделенного фрагмента текста из активногоMDI-окна в Clipboard. Для этого добавьте следующий обработчик событий к строке Copy менюEdit:

private void menuItem8_Click(object sender, System.EventArgs e)
{
Form activeChild = this.ActiveMdiChild;

if(activeChild!= null)
{
RichTextBox editBox = (RichTextBox)activeChild.ActiveControl;

if(editBox!= null)
{
Clipboard.SetDataObject(editBox.SelectedText);
}
}
}

Здесь мы вначале определяем идентификатор активного MDI-окна, извлекая его из свойства ActiveMdiChild родительского окна приложения MDI. Этот идентификатор сохраняется в переменной activeChild.

Если в приложении нет активного окна, то приведенный выше обработчик событий завершает свою работу, не выполняя никаких других действий.

Определив идентификатор активного MDI-окна, обработчик события получает идентификатор активного элемента управления, расположенного внутри этого окна. Для этого используется свойство activeChild.ActiveControl, хранящее ссылку на активный элемент управления.

В нашем случае MDI-окно содержит только один элемент управления — редакторRichTextBox. Поэтому полученную ссылку мы преобразуем явным образом к типу RichTextBox и сохраняем в переменной editBox для дальнейшего использования.

Теперь мы получили идентификатор нашего редактора текста и готовы переписать выделенный в его окне фрагмент текста в универсальный буфер обмена Clipboard. Запись вClipboard осуществляется методом Clipboard.SetDataObject.

В качестве параметра мы передаем методу Clipboard.SetDataObject выделенный текст, извлеченный из редактора текста с помощью свойства editBox.SelectedText.

Теперь дополним приложение кодом, необходимым для вставки данных из универсального буфера обмена Clipboard в активное MDI-окно.

Добавьте следующий обработчик события для строки Paste меню Edit:

private void menuItem9_Click(object sender, System.EventArgs e)
{
Form activeChild = this.ActiveMdiChild;

if(activeChild!= null)
{
RichTextBox editBox = (RichTextBox)activeChild.ActiveControl;

if(editBox!= null)
{
IDataObject data = Clipboard.GetDataObject();

if(data.GetDataPresent(DataFormats.Text))
{
editBox.SelectedText =
data.GetData(DataFormats.Text).ToString();
}
}
}
}

Как видите, этот обработчик вначале определяет идентификатор активного MDI-окна, а затем, пользуясь этим идентификатором и свойством ActiveControl, получает идентификатор редактора текста RichTextBox.

Далее для вставки данных из буфера Clipboard наш метод получает ссылку на интерфейсIDataObject, вызывая для этого метод Clipboard.GetDataObject. Эта ссылка сохраняется в переменной data.

Пользуясь полученной ссылкой на интерфейс IDataObject, наш обработчик события определяет, имеется ли в буфере Clipboard текст, который можно было бы вставить в редактор текста. Для этого используется метод GetDataPresent. В качестве параметра этому методу передается идентификатор формата текстовых данных DataFormats.Text (напомним, что в буфере Clipboard могут одновременно храниться данные разных форматов).

Если в буфере Clipboard имеются текстовые данные, программа извлекает их при помощи метода GetData, а затем преобразует в текстовую строку при помощи метода ToString. Далее эта текстовая строка записывается в свойство SelectedText нашего редактора текста, благодаря чему и происходит вставка данных из буфера Clipboard.

 




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


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


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



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




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