Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Лабораторная работа 1. Введение в Windows Forms. Базовые классы для элементов управления




Цель работы:

- ознакомиться со средой MS Visual Studio;

- изучить пространство имен System.Windows.Forms;

- изучить базовые классы для элементов управления;

- получить практические навыки создания событий для элементов управления WindowsForms.

Теоретический материал:

Microsoft Visual Studio - линейка продуктов компании Microsoft, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Windows, Windows Mobile, Windows CE,.NET Framework, Xbox, Windows Phone.NET Compact Framework и Silverlight (рис.1.1)

Рис.1.1 Интегрированная среда разработки Visual Studio

 

Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и как отладчик машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных. Visual Studio позволяет создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода (как, например, Subversion и Visual SourceSafe), добавление новых наборов инструментов (например, для редактирования и визуального проектирования кода на предметно-ориентированных языках программирования или инструментов для прочих аспектов процесса разработки программного обеспечения (например, клиент Team Explorer для работы с Team Foundation Server).

Visual Studio (версии 2010 и выше) включает один или несколько компонентов из следующих:

- Visual Basic.NET

- Visual C++

- Visual C#

- Visual F#

- Microsoft SQL Server/Microsoft SQL Server Express

 

Пространство имен System.Windows.Forms.

В ходе разработки и изменения пользовательского интерфейса приложений Windows Forms требуется добавлять, выравнивать и размещать элементы управления.

Элементы управления - это объекты, которые находятся внутри объектов формы. Каждый тип элемента управления имеет собственный набор свойств, методов и событий, соответствующих определенному назначению. С элементами управления можно работать в конструкторе или добавлять их динамически во время выполнения с помощью кода.

System.Windows.Forms содержит классы для создания приложений Windows, которые позволяют наиболее эффективно использовать расширенные возможности пользовательского интерфейса, доступные в ОС Windows. Основные классы, относящиеся к пространству имен System.Windows.Forms представлены в таблице 1.1.

Таблица 1.1

Основные классы пространства имен System.Windows.Forms

Категория класса Описание
Элементы управления, пользовательские элементы управления и формы Большинство классов в System.Windows.Forms являются производными от класса Control. Класс Control предоставляет основные функциональные возможности для всех элементов управления, отображаемых в Form. Класс Form представляет окно в приложении. Оно включает диалоговые окна, немодальные окна, а также клиентские и родительские окна интерфейса MDI. Можно также создать собственные элементы управления путем наследования от класса UserControl.
Меню и панели инструментов Windows Forms включает широкий набор классов, которые позволяют создавать пользовательские панели инструментов и меню, отличающиеся современным обликом и поведением. ToolStrip,MenuStrip, ContextMenuStrip и StatusStrip позволяют создавать панели инструментов, строки меню, контекстные меню и строки состояния, соответственно.
Элементы управления Ввод данных в приложении - TextBox и ComboBox. Отображение данных – Label, ListView. Вызов команд в приложении, например Button. Работа с таблицами – DataGridView Все элементы управления на форме: Toolbox→All Windows Forms
Макет Контроль за расположением элементов управления на отображаемой поверхности, например в форме или элементе управления. FlowLayoutPanel располагает все элементы управления которые содержит в последовательном режиме, а TableLayoutPanel позволяет определять ячейки и строчки для расположения элементов управления в фиксированной сетке. SplitContainer разделяет поверхность отображения на две или более корректируемых части.
Данные и привязка данных Архитектура для привязывания к таким источникам данных, как БД и XML-файлы. DataGridView предоставляет настраиваемую таблицу для отображения данных и позволяет настраивать формат ячеек, строк, столбцов и границ. BindingNavigator представляет стандартный способ навигации и работы с данными в форме; BindingNavigator часто используется в сочетании с элементом управления BindingSource для перемещения от одной записи к другой в форме, а также для выполнения операций с записями.
Компоненты Не являются производными от класса Control, но также обеспечивают визуальные функции для приложений Windows. ToolTip и ErrorProvider расширяют возможности или предоставляют сведения пользователям. Help и HelpProviderпозволяют отображают текст справки для пользователя, который работает с приложениями.
Общие диалоговые окна Классы OpenFileDialog и SaveFileDialog предоставляют возможность отображения диалогового окна, в котором пользователь может выполнить поиск файла, а также ввести имя файла, который необходимо открыть или сохранить. Класс FontDialog отображает диалоговое окно для изменения элементов Font, используемого приложением. Классы PageSetupDialog, PrintPreviewDialog и PrintDialog отображают диалоговые окна, позволяющие пользователю управлять параметрами печати документов. Класс MessageBox для отображения окна сообщения, в котором могут отображаться и извлекаться данные пользователя.

 

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

Рис. 1.2. Элементы управления Windows Forms (Toolbox→All Windows Forms)

Задание:

A.

Создайте приложение, в котором по мере того как происходят события KeyDown, KeyUp, KeyPress, данные каждого из них записываются в массив и выводятся в клиентской области формы (рис.1.3). Данные выводятся в виде таблицы. Колонки имеют заголовки и отображаются жирным шрифтом.

Требуется вывести в элемент управления DataGridView следующую информацию (рис.1.4):

- свойства KeyCode, KeyValue, KeyData, Modifiers, KeyChar (столбцы 1-5);

- event – какое событие происходит KeyDown, KeyUp или KeyPress (столбцы 6- 8);

- объяснить назначение перечисленных свойств и событий.

Рис. 1.3. События формы

 

Рис 1.4. Пример работы программы

 

 

B.

Создайте приложение, в котором используются свойства кнопок. На форме определите несколько кнопок; при щелчке на одной кнопке какие-то кнопки становятся невидимыми, другие недоступны, меняется цвет, размер и т.д. (минимум 5 свойств). Охарактеризуйте эти свойства.

C.

Создайте приложение, в котором при нажатии клавиш (клавиши выбираются самостоятельно) происходят вызовы методов RotateTransform, ScaleTransform, TranslateTransform, а также различных свойств класса Graphics.

Вызовы методов применить к графическим примитивам (Image, Rectangle, Ellipse, Line и пр.) и блокам текста. При каждом событии клавиатуры, изменять как положение графических объектов, так и их заливку.

Пример работы программы при запуске представлен на рис. 1.5.

Рис.1.5. Пример работы программы

D.

Нарисуйте на форме окружность с заливкой. Каждые t секунд цвет окружности должен изменяться; при этом название цвета отображается в нижней части формы. Использовать объект Timer.

Цвет выбирается случайным образом (использовать объект Random()).

 

 

 

E.

Напишите приложение, которое рисует на форме многоугольник с вершинами, заданными щелчками мыши (рис.1.6).

Рис.1.6. Пример работы программы

 


 

Лабораторная работа 2. Работа с файлами и потоками данных в.NET. Пространство имен System.IO

Цель работы:

- изучить пространство имен System.IO;

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

 

Теоретический материал:

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

Классы, содержащиеся в пространстве имен System.IO представлены в таблице 3.1.

Таблица 3.1

Классы пространства имен System.IO

Класс Описание
BinaryReader Считывает простые типы данных как двоичные значения в заданной кодировке.
BinaryWriter Записывает простые типы данных в поток как двоичные значения и поддерживает запись строк в определенной кодировке.
BufferedStream Осуществляет буферизацию в операциях чтения и записи в другие потоки. Этот класс не наследуется.
Directory Предоставляет статические методы для создания, перемещения и перечисления в каталогах и вложенных каталогах. Этот класс не наследуется.
DirectoryInfo Предоставляет методы экземпляра класса для создания, перемещения и перечисления в каталогах и подкаталогах. Этот класс не наследуется.
DirectoryNotFoundException Исключение, возникающее при невозможности найти часть файла или каталога.
DriveInfo Предоставляет доступ к сведениям на диске.
DriveNotFoundException Исключение вызывается при попытке доступа к недоступному диску или данным совместного использования.
EndOfStreamException Исключение, которое создается при попытке выполнить чтение за пределами потока.
ErrorEventArgs Предоставляет данные для события FileSystemWatcher.Error.
File Предоставляет статические методы для создания, копирования, удаления, перемещения и открытия файлов, а также помогает при создании объектов FileStream.
FileFormatException Исключение, которое вызывается, если входной файл или поток данных, который должен соответствовать определенной спецификации формата файла, сформирован неверно.
FileInfo Предоставляет свойства и методы экземпляра для создания, копирования, удаления, перемещения и открытия файлов, а также позволяет создавать объекты FileStream. Этот класс не наследуется.
FileLoadException Это исключение создается в случае, когда управляемая сборка найдена, но не может быть загружена.
FileNotFoundException Это исключение создается, когда попытка доступа к файлу, не существующему на диске, заканчивается неудачей.
FileStream Предоставляет Stream в файле, поддерживая синхронные и асинхронные операции чтения и записи.
FileSystemEventArgs Предоставляет данные для событий каталога: Changed, Created, Deleted.
FileSystemInfo Предоставляет базовый класс для объектов FileInfo и DirectoryInfo.
FileSystemWatcher Ожидает уведомления файловой системы об изменениях и инициирует события при изменениях каталога или файла в каталоге.
InternalBufferOverflowException Исключение, создаваемое при переполнении внутреннего буфера.
InvalidDataException Исключение возникает, когда поток данных имеет недопустимый формат.
IODescriptionAttribute Задает для визуальных конструкторов описания возможность отображения при обращении к событию, средству расширения или свойству.
IOException Исключение, создаваемое при возникновении ошибки ввода-вывода.
MemoryStream Создает поток, резервным хранилищем которого является память.
Path Выполняет операции для экземпляров класса String, содержащих сведения пути к файлу или каталогу. Эти операции выполняются межплатформенным способом.
PathTooLongException Исключение, создаваемое, когда путь или имя файла превышает максимальную длину, определенную системой.
PipeException Создается при ошибке в именованном канале.
RenamedEventArgs Предоставляет данные для события Renamed.
Stream Предоставляет универсальное представление последовательности байтов.
StreamReader Реализует TextReader, который считывает символы из потока байтов в определенной кодировке.
StreamWriter Реализует TextWriter для записи символов в поток в определенной кодировке.
StringReader Реализует класс TextReader, осуществляющий чтение из строки.
StringWriter Реализует TextWriter для записи данных в строку. Данные хранятся в основном StringBuilder.
TextReader Представляет средство чтения, позволяющее считывать последовательные наборы знаков.
TextWriter Представляет средство записи, позволяющее записывать последовательные наборы символов.Это абстрактный класс.
UnmanagedMemoryAccessor Предоставляет произвольный доступ к неуправляемым блокам памяти из управляемого кода.
UnmanagedMemoryStream Предоставляет доступ к неуправляемым блокам памяти из управляемого кода.
WindowsRuntimeStorageExtensions Содержит методы расширения для интерфейсов IStorageFile и IStorageFolder в Среда выполнения Windows при разработке приложений магазина Windows.
WindowsRuntimeStreamExtensions Содержит методы расширения для преобразования между потоками в Среда выполнения Windows и управляемыми потоками в Приложения.NET для Магазина Windows.

 


Задание:

A.

Напишите приложение для поиска файлов на диске. Приложение должно искать как отдельные файлы, так и все файлы определенного типа (например, *.txt, *.jpg и т.д.).

Пример интерфейса приложения представлен на рисунке 2.1:

Рис.2.1. Пример работы приложения

B.

Добавьте код к #2A, использующий класс FileStream и позволяющий просматривать файл в текстовом окне с помощью класса StreamReader. Затем добавьте возможность сжатия найденного файла.

 

# 2C.

Создайте приложение WindowsForms, представляющее собой текстовый редактор. Данное приложение имеет следующие возможности (рис.3.2.):

- запись новых текстовых файлов,

- открытие существующих текстовых файлов,

- дозапись информации в конец существующего текстового файла с последующим сохранением.

Рис.2.2. Пример работы приложения

#2D. Создайте приложение, позволяющие выводить сведения о файле и директории с помощью классов FileInfo и Directory. На форме использовать элемент управления TreeView. пример работы приложения представлен на рисунке 3.3:

Рис.3.3. Пример работы приложения

 

 

string[] drives = Directory.GetLogicalDrives();

foreach (string s in drives)

{

TreeNode tn = treeView1.Nodes.Add(s);

tn.Nodes.Add("");

tn.Tag = "";

}

 

#2E*. Создайте приложение, реализующее асинхронные операции чтения и записи в объект класса FileStream, также операции буферизации данных с помощью класса BufferedSream.

 


 

Лабораторная работа 3. Введение в WPF. Макет, структура и контейнеры. Упорядочивание элементов управления в XAML

 

Цель работы:

- ознакомиться с системой Windows Presentation Foundation (WPF);

- получить базовые практические навыки создания элементов управления в языке разметки XAML;

- Научиться размещать элементы управления в контейнерах;

- ознакомиться с маршрутизацией событий в WPF.

 

Теоретический материал:

Windows Presentation Foundation (WPF) - это система для построения клиентских приложений Windows с визуально привлекательными возможностями взаимодействия с пользователем. С помощью WPF можно создавать широкий спектр как автономных, так и размещенных в браузере приложений.

В основе WPF лежит векторная система отрисовки, не зависящая от разрешения и созданная с расчетом на возможности современного графического оборудования.

WPF расширяет базовую систему полным набором функций разработки приложений, в том числе язык XAML (Extensible Application Markup Language), элементами управления, привязкой данных, макетом, двухмерный- и трехмерный-графикой, анимацией, стилями, шаблонами, документами, мультимедиа, текстом и оформлением. WPF входит в состав Microsoft.NET Framework и позволяет создавать приложения, включающие другие элементы библиотеки классов.NET Framework.

 

Программирование с использованием WPF

WPF существует в качестве подмножества типов.NET Framework, которые занимают большую часть в пространстве имен System.Windows. Пользователи, которые ранее создавали приложения с помощью.NET Framework, используя такие управляемые технологии, как ASP.NET и Windows Forms, должны быть знакомы с основами программирования WPF; создание экземпляров классов, задание свойств, вызов методов и обработка событий осуществляется аналогично.

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

Разметка и код программной части

В WPF дополнительно совершенствуется процесс программирования для разработки клиентских приложений Windows. Одним очевидным усовершенствованием является возможность разрабатывать приложения с помощью разметки и кода программной части, с которыми разработчики ASP.NET должны быть уже знакомы. Разметка Язык XAML обычно используется для реализации внешнего вида приложения при реализации его поведения с помощью управляемых языков программирования (кода программной части). Это разделение внешнего вида и поведения имеет следующие преимущества:

- Затраты на разработку и обслуживание снижаются, так как разметка определенного внешнего вида тесно не связана с кодом определенного поведения.

- Разработка более эффективна, так как разработчики, реализующие внешний вид приложения, могут это делать одновременно с разработчиками, реализующими поведение приложения.

- Для реализации и совместного использования разметки Язык XAML применяется множество средств конструирования, чтобы удовлетворить требованиям участников разработки приложений.

- Глобализация и локализация для приложений WPF существенно упрощены.

 

Разметка

Язык XAML - это основанный на XML язык разметки, который используется для декларативной реализации внешнего вида приложения. Обычно он используется для создания окон, диалоговых окон, страниц и пользовательских элементов управления, а также для их заполнения элементами управления, фигурами и графикой.

В следующем примере с помощью Язык XAML реализуется внешний вид окна, содержащего одну кнопку.

<Window

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

Title="Window with Button"

Width="250" Height="100">

 

<!-- Add button to window -->

<Button Name="button">Click Me!</Button>

 

</Window>

 

В частности, этот Язык XAML-код определяет окно и кнопку с помощью элементов Window и Button, соответственно. Каждый элемент настраивается с помощью атрибутов, таких как атрибут Title элемента Window, в котором задается текст заголовка окна. Во время выполнения WPF преобразует элементы и атрибуты, определенные в разметке, в экземпляры классов WPF. Например, элемент Window преобразуется в экземпляр класса Window, свойство Title которого является значением атрибута Title.

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

Рис.3.1. Пользовательский интерфейс

 

Поскольку Язык XAML основан на XML, Пользовательский интерфейс, который формируется с его помощью, организуется в виде иерархии вложенных элементов, называемой деревом элементов. Дерево элементов предоставляет логичный и интуитивно понятный способ для создания и управления пользовательских интерфейсов.

 

Код программной части

Приложение в основном предназначено для реализации функциональных возможностей, которые отвечают на взаимодействия с пользователем, включая обработку событий (например, нажатие меню, панели инструментов или кнопки) и вызов бизнес-логики и логики доступа к данным в ответ на события. В WPF такое поведение обычно реализуется в коде, который связан с разметкой. Этот тип кода называется кодом программной части. В следующем примере показан код программной части и обновленная разметка из предыдущего примера.

namespace SDKSample

{

public partial class AWindow: Window

{

public AWindow()

{

// InitializeComponent call is required to merge the UI

// that is defined in markup with this class, including

// setting properties and registering event handlers

InitializeComponent();

}

 

void button_Click(object sender, RoutedEventArgs e)

{

// Show message box when button is clicked

MessageBox.Show("Hello, Windows Presentation Foundation!");

}

}

}

В этом примере код программной части реализует класс, производный от класса Window. Атрибут x:Class связывает разметку с классом кода программной части. Метод InitializeComponent вызывается из конструктора класса кода программной части, чтобы объединить пользовательский интерфейс, определенный в разметке, с этим классом. (InitializeComponent генерируется при построении приложения, поэтому нет необходимости реализовывать его вручную.) Комбинация x:Class и InitializeComponent позволяет гарантировать правильную инициализацию созданной реализации. Класс кода программной части также реализует обработчик событий для события кнопки Click. При нажатии кнопки обработчик событий показывает окно сообщения с помощью метода MessageBox.Show.

На рисунке 3.2. показан результат нажатия этой кнопки.

Рис.3.2. Результат работы примера

 

Задание:

A.

Создайте WPF Window-приложение. Поместите в приложение три элемента RadioButton и один элемент TextBox. Реализуйте пузырьковые события TextChanged элемента TextBox, которые восходят сначала к элементу управления Grid, затем к элементу управления Window (рис. 3.3.).

В MessageBox выводите информацию о прохождении события (рис.3.4).

Рис.3.3. Пользовательский интерфейс приложения

 

Рис.3.4. Пример работы приложения

 

B.

Создайте приложение WPF, позволяющее в фоновом режиме производить счет в длительном цикле до заданного большего числа туда и обратно. При нажатии кнопки «Старт» цикл начинается или возобновляется, при нажатии кнопки «Стоп» цикл приостанавливается. На Label отображается текущее значение (рис.5.5).

Рис.3.5. Пример работы приложения

C.

Создайте элементарный текстовый редактор с кнопками, реализующими команды Cut, Copy, Paste. Поместите заданные кнопки в элемент управления Toolbar (рис.3.6).

Повторно задайте данные кнопки, но уже в элементе управления Grid. Объясните разницу.

Дополнительно задайте новые кнопки с командами Undo, Redo.

Рис.3.6. Пример работы приложения

 

Ход работы:

Некоторые элементы управления вводом умеют обрабатывать события команд самостоятельно. Например, класс TextBox обрабатывает команды Cut, Сору и Paste (а также команды Undo и Redo и часть команд класса EditingCommands, которые позволяют выделять текст и перемещать курсор в разные позиции).

Когда элемент управления имеет собственную жестко закодированную логику обработки команд, для обеспечения работы команд ничего делать не требуется. Например, добавление в простой текстовый редактор, следующих кнопок панели инструментов автоматически приводит к появлению возможности вырезания, копирования и вставки текста:

<Тоо1Ваr>

<Button Command="Cut">Cut</Button>

<Button Command="Copy">Copy</Button>

<Button Command="Paste">Paste</Button>

</ToolBar>

 

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

Элемент управления TextBox также обрабатывает событие CanExecute. Если в текстовом поле в текущий момент ничего не выделено, команды Cut и Сору не будут доступны. Если фокус установлен на элементе управления, который не поддерживает команды Copy, Cut и Paste (если только к нему не был специально присоединен собственный обработчик события CanExecute, включающий их), то все три команды сразу же автоматически отключаются.

Команды Copy, Cut и Paste обрабатываются тем элементом управления TextBox, на котором находится фокус. Однако в действие они приводятся соответствующей кнопкой в панели инструментов, которая представляет собой совершенно отдельный элемент. В данном примере этот процесс протекает гладко, потому что каждая кнопка размещается в панели инструментов, а класс ToolBar включает в себя встроенную логику, которая обеспечивает динамическую установку свойства CommandTarget его потомков в элемент управления, в текущий момент имеющий фокус. (Формально элемент ToolBar просматривает родительский элемент, которым является окно, и в этом контексте находит элемент управления, недавно имевший фокус, в данном случае - текстовое поле. Элемент управления ToolBar имеет отдельную область действия фокуса, и в этом контексте фокус находится на кнопке.)

Если кнопки размещены в другом контейнере (отличном от ToolBar и Menu), такого преимущества не будет. То есть кнопки не будут работать до тех пор, пока для них вручную не будет установлено свойство CommandTarget. Это требует использования выражения привязки с именем целевого элемента. Например, в случае, если именем текстового поля является txtDocument, кнопки должны быть определены следующим образом:

<Button Command="Cut"

CommandTarget="{Binding ElementName=txtDocument}">Cut</Button>

<Button Command="Copy"

CommandTarget="{Binding ElementName=txtDocument}">Copy</Button>

<Button Command="Paste"

CommandTarget="(Binding ElementName=txtDocument}">Paste</Button>

Другой, более простой вариант предусматривает создание новой области действия фокуса с использованием присоединенного свойства FocusManager.IsFocusScope. Это заставляет WPF при срабатывании команды искать элемент в области действия фокуса родительского элемента:

<StackPanel FocusManager.IsFocusScope="True">

<Button Command="Cut">Cut</Button>

<Button Command="Copy">Copy</Button>

<Button Command="Paste">Paste</Button>

</StackPanel>

Такой подход обладает дополнительным преимуществом, поскольку позволяет применять одни и те же команды к множеству элементов управления в отличие от предыдущего примера, где свойство CommandTarget кодировалось жестким образом. Кстати, в элементах Menu и ToolBar свойство FocusManager.IsFocusScope по умолчанию установлено в true, но если нужно иметь более простое поведение при маршрутизации команд, не предусматривающее поиск находящегося в фокусе элемента в контексте родителя, FocusManager.IsFocusScope следует установить в false.

Лабораторная работа 4. Графика в WPF. Двухмерные формы, геометрия, эффекты. Трехмерная отрисовка. Анимация

 

Цель работы:

- ознакомиться с пространством имен System.Windows.Controls;

- получить практические навыки создания элементов управления в языке разметки XAML;

- получить практические навыки работы с мультимедиа в WPF.

Теоретический материал:

Пространство имен System.Windows.Controls предоставляет классы для создания элементов, известных как элементы управления, позволяющих пользователю взаимодействовать с приложением. Классы элементов управления являются основой пользовательского взаимодействия с приложением, так как они позволяют пользователю просматривать, выбирать или вводить данные или другую информацию.

 

Задание:

A.

Создайте приложение WPF. В верхней части приложения расположите элемент управления ToolBar, а в нижней элемент RichTextBox. В элемент управления ToolBar поместите две кнопки, один элемент управления Slider и один элемент управления ComboBox. Определите код, реализующий изменение начертания текста, размер и выбор нужного шрифта (рис. 4.1).

Рис. 4.1. Пример работы приложения

B.

Измените приложение #4A. Раскладку по умолчанию поменяйте на DockPanel. В верхней части приложения расположите элемент управления ToolBar, а в нижней - Grid. В элемент управления ToolBar поместите две кнопки, один элемент управления Slider. В элементе управления раскладкой Grid определите три столбца. В первый столбец поместите ListBox, во второй – GridSplitter, в третий - RichTextBox. Определите код, реализующий изменение начертания текста, размер и выбор нужного шрифта (рис.4.2).

Рис. 7.2. Пример работы приложения

C.

Создайте программу для калькулятора, которая использует элемент управления UniformGrid для раскладки цифровых клавиш и панель инструментов для раскладки функциональных клавиш. Поместите оба элемента в элемент управления Grid. Проверьте функционал калькулятора (рис.4.3).

Затем создайте новую версию, где оба элемента содержались бы в элементе управления DockPanel.

Рис. 4.3. Пример работы приложения

D.

Создайте WPF-приложение, реализующее работу проигрывателя мультимедиа. Модифицируйте приложение проигрывателя мультимедиа таким образом, чтобы можно было управлять громкостью, балансом и скоростью воспроизведения (рис.4.4).

Рис. 4.4. Пример работы приложения

 

E.

Реализуйте классы VisualBrush, LinearGradientBrush, RadialGradientBrush, ImageBrush и создайте приложение, которое применяет эти кисти для окраски фона Rectangle, Ellipse или другого элемента управления с использованием различных эффектов.


 

Лабораторная работа 5-1. Привязка данных в WPF. {Binding}. Ресурсы и шаблоны данных. Часть 1

 

Цель работы:

- ознакомиться с объектом Binding;

- получить практические навыки создания привязки данных в WPF.

 

Теоретический материал:

Объект Binding управляет всеми привязками WPF. Свойство ElementName указывает на исходный объект, если им является элемент WPF. Свойство RelativeSource определяет расположение исходного объекта в визуальном дереве относительно конечного объекта, свойство Source используется для идентификации исходного объекта, который не является элементом WPF.

Свойство DataContext удобно применять для создания среды данных элемента управления или контейнера. Оно часто задается в коде, если исходный объект привязки требуется инициировать в коде. Затем в XAML можно создать объекты Binding, которые не назначают исходный объект, а выполняют в визуальном дереве поиск ближайшего заданного свойства DataContext.

С помощью свойства Mode можно задать режим привязки. Обычно используются два режима: OneWay, обновляющий конечное свойство при изменении исходного, и TwoWay, обновляющий одно свойство (исходное или конечное), если изменяется другое.

С помощью свойства UpdateSourceTrigger можно управлять обновлением исходного свойства в связывании данных. Обычно используются триггеры обновления PropertyChanged, этот триггер передает связанное значение при изменении свойства, и LostFocus, передающий новое значение при потере фокуса элементом.

В процессе привязки элемента управления элементами к списку данных необходимо задать свойству ItemsSource объект Binding, который указывает на источник данных списка. Свойство DisplayMemberPath определяет, какое свойство должно отображаться в элементе управления элементами.

Отдельные свойства можно привязать к спискам данных. Изначально отображается первый член связанного списка, а навигация осуществляется с помощью интерфейса ICollectionView по умолчанию, который извлекается через объект CollectionViewSource.

 


Задание:

Создайте приложение для просмотра связанной информации из БД. Например, для выбранного имени (название фильма, имя клиента, имя продавца и т.п.) просмотреть список соответствующих данных, а затем более детальную информацию из выбранного элемента списка.

 

 


 

Лабораторная работа 5-2. Привязка данных в WPF. {Binding}. Ресурсы и шаблоны данных. Часть 2

 

Цель работы:

- получить практические навыки работы с объектом Binding в WPF;

- получить практические навыки реализации преобразований и подтверждений данных в WPF.

 

Задание:

A

Реализуйте интерфейс IMultiValueConverter для создания конвертера, который принимает целые числа, указывающие день, месяц и год, и возвращает объект DateTime. Также реализуйте метод ConvertBack.

 

B

Реализуйте правила, которые подтверждают данные, используемые конвертером IMultiValueConverter. Введите такие правила, чтобы нельзя было задавать несуществующие даты (например, 31 июня). Кроме того, реализуйте правило, которое подтверждает 29 февраля только в високосном году.

 


 

Лабораторная работа 6-1. Создание базы данных SQL Server в Server Explorer

 

Цель работы:

- изучить технологию ADO.NET;

- получить практические навыки создания базы данных SQL Server в Server Explorer;

 

Теоретический материал:

Server Explorer (обозреватель серверов или обозреватель баз данных) - это инструмент MS Visual Studio, который используется для определения (или редактирования) структуры или данных любой таблицы в подключенной базе данных. Фактически при помощи Server Explorer можно создать новый экземпляр базы данных SQL Server с нуля.

 

Задание:

Спроектировать базу данных в Visual Studio (Server Explorer). Предметную область согласовать с преподавателем.

База данных должна иметь минимум 6 таблиц.

Должны быть реализованы как минимум две функции (function) и две хранимых процедуры (stored procedure); одна из них возвращает значение, другая - таблицу

Таблицы должны иметь поля типов int, money, nchar, nvarchar, date/datetime, image.

2. Создать клиентское приложение WPF, отвечающее следующим требованиям:

- Вывод информации из всех таблиц (можно использовать несколько форм или элемент TabControl);

- Обновление, редактирование, удаление записей;

- Работа с запросами (например, поиск, подсчет сумм, количества и пр.), функциями и хранимыми процедурами;

- Создание резервной копии базы данных (BACKUP);

- Использовать обработку исключений (блоки try-catch-finally).


 

Лабораторная работа 6-2. Создание клиентского приложения WPF, использующего базу данных из ЛР 6-1

 

Цель работы:

- изучить технологию ADO.NET;

- получить практические навыки связывания базы данных и клиентского приложения в.NET Framework;

 

Теоретический материал:

ADO.NET - это набор классов, предоставляющих службы доступа к данным программисту, работающему на платформе.NET Framework. ADO.NET имеет богатый набор компонентов для создания распределенных приложений, совместно использующих данные. Это неотъемлемая часть платформы.NET Framework, которая предоставляет доступ к реляционным данным, XML-данным и данным приложений. ADO.NET удовлетворяет различные потребности разработчиков, включая создание клиентских приложений баз данных, а также бизнес-объектов среднего уровня, используемых приложениями, средствами, языками и браузерам.

ADO.NET предоставляет согласованный доступ к таким источникам данных, как SQL Server и XML, а также к источникам данных, предоставляемым при помощи OLE DB и ODBC. Пользовательские приложения, использующие общие данные, могут использовать ADO.NET для соединения с этими источниками данных и для получения, обработки и обновления имеющихся в них данных.

Классы ADO.NET имеются в System.Data.dll и интегрируются с классами XML, имеющимися в System.Xml.dll.

Для разработчиков, которые пишут управляемый код, ADO.NET предоставляет функциональный набор, сходный с функциональным набором, который предоставляют объекты данных ActiveX (ADO) разработчикам моделей объектов собственных компонентов (COM). Для доступа к данным в приложении.NET мы рекомендуем использовать ADO.NET, а не ADO.

ADO.NET предоставляет самый прямой способ доступа к данным в.NET Framework.

 

Архитектура ADO.NET

Обработка данных традиционно полагалась в основном на двухуровневую модель, основанную на сетевом соединении. Так как при обработке данных все больше используется многоуровневая архитектура, программисты переходят на метод, не использующий подключение, чтобы обеспечить лучшую масштабируемость для их приложений.

 

Компоненты ADO.NET

Двумя основными компонентами ADO.NET для доступа к данным и их обработки являются поставщики данных.NET Framework и DataSet.

1. Поставщики данных.NET Framework

Поставщиками данных.NET Framework являются компоненты, которые специально сконструированы для обработки данных и быстрого, однопроходного доступа к данным только для чтения. Объект Connection обеспечивает обмен данными с источником данных. Объект Command позволяет обращаться к командам базы данных для возврата данных, изменения данных, выполнения хранимых процедур и передачи или получения сведений о параметрах. DataReader обеспечивает высокопроизводительный поток данных из источника данных. Наконец, DataAdapter предоставляет мост между объектом DataSet и источником данных. DataAdapter использует объекты Command для выполнения команд SQL на источнике данных для загрузки DataSet с данными и согласования изменений данных, выполненных в DataSet, вновь с источником данных.

2. DataSet

Класс DataSet в ADO.NET специально сконструирован для доступа к данным независимо от источника данных. Поэтому он может быть использован со многими и разными источниками данных, с XML-данными или для управления данными, локальными для приложения. DataSet содержит коллекцию одного или нескольких объектов DataTable, состоящих из строк и столбцов данных, а также первичный ключ, внешний ключ, ограничение и связанные сведения о данных в объектах DataTable.

Выбор между DataReader или DataSet

При решении вопроса о том, должно ли приложение использовать DataReader или DataSet, следует рассмотреть тип функциональности, который необходим для приложения. DataSet предназначен для выполнения следующих задач:

Локальное кэширование данных в приложении для последующей обработки. Если нужно только считывать результаты запроса, класс DataReader подходит наилучшим образом.

Удаленное взаимодействие с данными между уровнями или от веб-службы XML.

Динамическое взаимодействие с данными, например привязка к элементу управления Windows Forms или комбинирование и связывание данных из нескольких источников.

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

Если функциональность, предоставляемая классом DataSet, не нужна, можно повысить производительность приложения, используя класс DataReader для возврата данных в однопроходном режиме только для чтения. Хотя класс DataAdapter использует класс DataReader для заполнения содержимого DataSet, путем применения класса DataReader можно повысить производительность, т.к. будет экономиться память, которую потреблял бы объект DataSet, и избежать обработки, необходимой для создания и заполнения содержимого DataSet.

 

LINQ to DataSet

Технология LINQ to DataSet предоставляет возможности выполнения запросов и проверки типов во время компиляции для данных, кэшированных в объекте DataSet.

LINQ to SQL

LINQ to SQL поддерживает запросы к модели объектов, сопоставленной со структурами данных реляционной базы данных, без использования промежуточной концептуальной модели. Каждая таблица представляется отдельным классом; таким образом, модель объектов тесно привязывается к схеме реляционной базы данных. LINQ to SQL преобразует запросы LINQ из модели объектов в язык Transact-SQL и передает их в базу данных для выполнения. При возврате результатов базой данных LINQ to SQL преобразует результаты обратно в объекты.

 

Системы типов

В SQL Server и.NET Framework используются различные системы типов. Например, максимальная разрядность структуры.NET Framework Decimal составляет 28, в то время как максимальная разрядность десятичных и числовых типов данных SQL Server - 38. Чтобы обеспечить целостность данных при чтении и записи, объект SqlDataReader предоставляет характерные для SQL Server типизированные методы доступа, возвращающие объекты System.Data.SqlTypes, а также методы доступа, возвращающие типы.NET Framework. Типы данных SQL Server и.NET Framework также представлены перечислениями в классах DbType и SqlDbType, которые можно использовать при указании типов данных SqlParameter.

В таблице 6.1 показан выводимый тип.NET Framework, перечисления DbType и SqlDbType, а также методы доступа для класса SqlDataReader.

Таблица 6.1

Типы данных SQL сопоставленные с типами C#

Тип ядра СУБД SQL Server Тип платформы.NET Framework Перечисление SqlDbType Типизированный метод доступа SqlDataReader SqlTypes Перечисление DbType Типизированный метод доступа SqlDataReader DbType
bigint Int64 BigInt GetSqlInt64 Int64 GetInt64
Бинарные Byte[] VarBinary GetSqlBinary Binary GetBytes
bit Логические Bit GetSqlBoolean Boolean GetBoolean
char string Char[] Char GetSqlString AnsiStringFixedLength, String GetString GetChars
Date (SQL Server 2008 и более поздние версии) DateTime Date GetSqlDateTime Date GetDateTime
datetime DateTime DateTime GetSqlDateTime DateTime GetDateTime
datetime2 (SQL Server 2008 и более поздние версии) DateTime DateTime2 NONE DateTime2 GetDateTime
datetimeoffset (SQL Server 2008 и более поздние версии) DateTimeOffset DateTimeOffset NONE DateTimeOffset GetDateTimeOffset
decimal decimal Decimal GetSqlDecimal Decimal GetDecimal
Атрибут FILESTREAM (varbinary(max)) Byte[] VarBinary GetSqlBytes Binary GetBytes
float Double Float GetSqlDouble Double GetDouble
image Byte[] Binary GetSqlBinary Binary GetBytes
int (Целочисленное значение) Int32 Int GetSqlInt32 Int32 GetInt32
money decimal Money GetSqlMoney Decimal GetDecimal
nchar string Char[] NChar GetSqlString StringFixedLength GetString GetChars
ntext string Char[] NText GetSqlString String GetString GetChars
числовой decimal Decimal GetSqlDecimal Decimal GetDecimal
nvarchar string Char[] NVarChar GetSqlString String GetString GetChars
real Single Real GetSqlSingle Single GetFloat
rowversion Byte[] Timestamp GetSqlBinary Binary GetBytes
smalldatetime DateTime DateTime GetSqlDateTime DateTime GetDateTime
smallint Int16 SmallInt GetSqlInt16 Int16 GetInt16
smallmoney decimal SmallMoney GetSqlMoney Decimal GetDecimal
sql_variant Object *[1] Variant GetSqlValue * Object GetValue *
text string Char[] Text GetSqlString String GetString GetChars
время (SQL Server 2008 и более поздние версии) TimeSpan Time NONE Time GetDateTime
отметка времени Byte[] Timestamp GetSqlBinary Binary GetBytes
tinyint Byte TinyInt GetSqlByte Byte GetByte
uniqueidentifier Guid UniqueIdentifier GetSqlGuid Guid GetGuid
varbinary Byte[] VarBinary GetSqlBinary Binary GetBytes
varchar string Char[] VarChar GetSqlString AnsiString, String GetString GetChars
xml Xml Xml GetSqlXml Xml NONE

Объекты DataSet, DataTable и DataView

ADO.NET DataSet является находящимся в оперативной памяти представлением данных, обеспечивающим согласованную реляционную программную модель независимо от источника данных. DataSet представляет полный набор данных, включая таблицы, содержащие, упорядочивающие и ограничивающие данные, а также связи между таблицами.

Существует несколько способов работы с DataSet, которые могут применяться отдельно или в сочетании. Можно сделать следующее.

1. Программно создать DataTable, DataRelation и Constraint внутри DataSet и заполнить таблицы данными.

2. Заполнить DataSet таблицами данных из существующего реляционного источника данных с помощью DataAdapter.

3. Загрузить и сохранить содержимое DataSet с помощью XML-кода.

Строго типизированный DataSet также можно передавать с помощью веб-службы с поддержкой XML-кода. Конструкция DataSet делает его идеальным для передачи данных с помощью веб-служб с поддержкой XML-кода.

Экземпляр объекта DataSet создается путем вызова конструктора DataSet. Кроме того, можно задать аргумент имени. Если имя для объекта DataSet не задано, то ему присваивается имя «NewDataSet».

Также можно создать новый объект DataSet на базе существующего объекта DataSet. Новый объект DataSet может быть точной копией существующего объекта DataSet, клоном объекта DataSet, который копирует реляционную структуру или схему, но не содержит каких-либо данных из существующего объекта DataSet, или сокращенной версией объекта DataSet, содержащей только строки из существующего объекта DataSet, измененные при помощи метода GetChanges.

Следующий пример кода демонстрирует, как построить экземпляр объекта DataSet.

DataSet customerOrders = new DataSet("CustomerOrders");

 

Добавление DataTable в DataSet

ADO.NET позволяет создавать объекты DataTable и добавлять их к существующему DataSet. Можно задать данные ограничения для DataTable, используя свойства PrimaryKey и Unique.

Следующий пример показывает, как создать объект DataSet, добавить новый объект DataTable к DataSet, а затем добавить к таблице три объекта DataColumn. В конце код задает один столбец в качестве столбца первичного ключа.

DataSet customerOrders = new DataSet("CustomerOrders");

DataTable ordersTable = customerOrders.Tables.Add("Orders");

 

DataColumn pkOrderID =

ordersTable.Columns.Add("OrderID", typeof(Int32));

ordersTable.Columns.Add("OrderQuantity", typeof(Int32));

ordersTable.Columns.Add("CompanyName", typeof(string));

 

ordersTable.PrimaryKey = new DataColumn[] { pkOrderID };

Учет регистра

В DataSet могут существовать две или несколько таблиц или связей, имеющие одинаковые имена, которые, тем не менее, состоят из символов с разными регистрами. В таких случаях ссылки по имени на таблицы и связи задаются с учетом регистра. Например, если DataSet dataSet содержит таблицы Table1 и table1, ссылка на таблицу по имени Table1 выглядит как dataSet.Tables["Table1"], а не как dataSet.Tables["table1"]. Попытка сослаться на любую из таблиц как на dataSet.Tables["TABLE1"] вызывает исключение.

Это правило учета регистра не применяется, если только одна таблица или связь имеет какое-то определенное имя. Например, если набор данных DataSet содержит только таблицу Table1, можно сослаться на нее, используя формат dataSet.Tables["TABLE1"].

 

Получение и изменение данных в ADO.NET

Основной функцией любого приложения базы данных является соединение с источником данных и извлечение данных, которые он содержит. Поставщики данных.NET Framework ADO.NET обеспечивают взаимодействие между приложением и источником данных, позволяя выполнять команды и получать данные с помощью DataReader или DataAdapter. Ключевой функцией любого приложения базы данных является возможность обновления данных, хранимых в базе данных. В ADO.NET обновление данных включает использование DataAdapter и DataSet, а также объектов Command. Обновление может включать использование транзакций.

Задание:

Создать клиентское приложение WPF, которое подключается к базе данных практической работы 6-1. Клиентское приложение должно отвечать следующим требованиям:

- Вывод информации из всех таблиц (можно использовать несколько форм или элемент TabControl);

- Обновление, редактирование, удаление записей;

- Работа с запросами (например, поиск, подсчет сумм, количества и пр.), функциями и хранимыми процедурами;

- Создание резервной копии базы данных (BACKUP);

- Использовать обработку исключений (блоки try-catch-finally).


 

Лабораторная работа 7. Работа с документами в WPF

 

Цель работы:

- получить практические навыки доступа к объектам взаимодействия Office с помощью функций языка Visual C#.

 

Теоретический материал:

Для использования компонентов приложения Microsoft Office из проекта Office необходимо использовать основную сборку взаимодействия (PIA) для приложения. Основная сборка взаимодействия позволяет управляемому коду взаимодействовать с основанной на COM объектной моделью приложения Microsoft Office.

При создании нового проекта Office Visual Studio добавляет ссылки на основные сборки взаимодействия, которые нужны для сборки проекта. В некоторых сценариях может потребоваться добавить ссылки на дополнительные основные сборки взаимодействия (например, если требуется использовать Microsoft Office Word в проекте для Microsoft Office Excel).

using Excel = Microsoft.Office.Interop.Excel;

using Word = Microsoft.Office.Interop.Word;

using Outlook = Microsoft.Office.Interop.Outlook;

 

Задание:

A.

Создайте приложение WPF с RichTextBox, позволяющее передавать текст в документ.docx, а также загружать данные из документа.docx в RichTextBox.

 

B.

Создайте приложение WPF с DataGrid, позволяющее передавать текст в ячейки.xlsx, а также загружать данные из документа.xlsx в DataGrid.

 

C.

Сгенерировать письмо MS Outlook на основе заполненных элементов управления приложения WPF. Письмо должно иметь адресата, тему, тип важности, тело письма, подпись.


 

Лабораторная работа 8. Источник данных XML в WPF

Цель работы:

- ознакомиться с языком запросов Xpath;

- изучить класс XmlDataProvider;

- ознакомиться с технологией LINQ to XML;

 

Теоретический материал:

Язык XAML является диалектом XML, созданным в корпорации Майкрософт для поддержки технологий.NET Framework 3.0.Он используется в WPF для представления элементов пользовательского интерфейса и связанных с этим возможностей, таких как события и привязка данных.В WPF язык XAML используется для представления структуры программ, например в виде средств управления программой (потоков операций).XAML позволяет отделить декларативные аспекты технологии от связанного с ними процедурного кода, определяющего более индивидуализированное поведение программы.

Существует два общих способа взаимодействия XAML и LINQ to XML.

- Поскольку файлы XAML - это XML-документы правильного формата, к ним можно выполнять запросы и управлять ими с помощью таких XML-технологий, как LINQ to XML.

- Запросы LINQ to XML представляют источник данных, поэтому могут использоваться как источник данных для привязки данных в элементах пользовательского интерфейса WPF.

Xpath - это язык запросов к элементам xml или xhtml документа. Также как SQL, xpath является декларативным языком запросов. Чтобы получить интересующие данные, необходимо всего лишь создать запрос, описывающий эти данные.

XPath и LINQ to XML имеют некоторые сходные функциональные возможности.И то и другое можно использовать, чтобы запрашивать XML-дерево для возвращения таких результатов, как коллекция элементов, коллекция атрибутов, коллекция узлов или значение элемента или атрибута.Однако между ними также есть некоторые различия.

С помощью XmlDataProvider к базовым данным можно обращаться через привязку данных в приложении и они могут являться любым деревом узлов XML. Другими словами, XmlDataProvider обеспечивает удобный способ использования любого дерева узлов XML в качестве источника привязки.

 

A.

Создайте приложение чтения RSS (Really Simple Syndication), которое загружает и форматирует данные RSS с помощью класса XmlDataProvider.

 

B.

Создайте приложение, которое напрямую считывает данные из XML-файла. Использовать различные запросы. Реализовать возможность изменять значения в XML-файле.

 

 


 

Лабораторная работа 9. Источник данных XML в WPF. Работа с XML-данными в SQL базе данных

Цель работы:

- получить практические навыки при работе с классом XmlDataProvider.

- получить практические навыки при работе с XML-файлом, находящимся в поле таблицы базы данных.

Задание:

Создайте приложение, реализующее следующий сценарий. Для некоторой фирмы «ABC» служащие в различных регионах страны подбирают работников для каких-то специфических работ. Этим служащим нужно регулярно передавать отчеты о своей деятельности, используя Интернет. Для отчетов используется генератор отчетов, который создает файлы XML и отправляет их по электронной почте в приложение. Приложение сохраняет их в очереди в виде необработанных данных XML. В приложении они должны анализироваться (т.е. исходные файлы XML изменять нельзя) и затем сохраняться в БД.


 

Лабораторная работа 10. Использование внешних сборок и библиотек для создания WPF-приложений

Цель работы:

- получить практические навыки при подключении и работе со внешними сборками и библиотеками;

- получить практические навыки при работе с общими методами обмена данными с ресурсом, заданным URI.

 

Задание:






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных