- •Содержание
- •Тема 1. Введение в язык программирования c#
- •Первое знакомство с языком программирования с#
- •Языки программирования и компиляторы
- •Устройство компьютера
- •Процесс разработки программного обеспечения
- •Процесс исполнения программы на с#
- •Три различных типа ошибок
- •Знакомство с .Net
- •Синтаксические блоки
- •Тема 2. Синтаксис языка программирования с#, встроенные типы данных Алфавит языка программирования с#
- •Идентификаторы
- •Типы данных языка программирования с#
- •Встроенные простые типы языка c#
- •Совместимость целочисленных типов
- •Тема 3. Переменные, бинарные в языке программирования с# Присваивание значений переменным
- •Бинарные операции.
- •Операции сравнения и логические выражения
- •Алгоритм
- •Тема 4. Операторы ветвления Простой оператор if
- •Оператор if / else
- •Вложенные операторы if
- •Операторы if-else с несколькими ветвями
- •Оператор Switch
- •Рекомендации по использованию оператора switch
- •Область видимости переменных
- •Тема 5. Операторы итерации
- •Оператор цикла while
- •Оператор цикла do-while
- •Оператор цикла for
- •Оператор break
- •Оператор continue
- •Вложенные операторы итерации
- •Тема 6. Массивы Общие сведения
- •Перебор элементов массива Оператор for и foreach
- •????Методы для работы с массивами Многомерные массивы
- •?????Массивы неправильной формы Тема 7. Специальные типы
- •Работа со строками
- •Доступ к отдельным символам в строке.
- •Разработка алгоритма выборки слов
- •Некоторые методы для работы со строками.
- •Тема 8. Объектно-ориентированное программирование ооп основные понятия и предпосылки возникновения.
- •Концепции ооп
- •Убрать Сборки.
- •Элементы класса и применение методов
- •Тема 9. Методы Объявление методов.
- •Статические методы.
- •Конструкторы
- •Семестр 2. Визуальное программирование. Введение в проектирование графических интерфейсов
- •Формы в приложениях c# Работа с формами
- •Добавление формы к проекту
- •Выбор первоначального размещения формы
- •Изменение внешнего вида формы
- •Свойства BackColor, ForeColor и Text
- •Свойства Font, Cursor и BackGroundlmage
- •Прозрачность формы
- •Выбор рамки для формы
- •Кнопки изменения размеров формы
- •Добавление фонового изображения
- •Изменение формы курсора
- •Методы формы
- •Метод Show()
- •Метод ShowDialog()
- •Метод Activate()
- •Метод Hide()
- •Метод Close()
- •События формы.
- •События жизненного цикла формы
- •Событие Load
- •События Activated и Deactivated
- •Изменение текста надписи
- •Изменение шрифта
- •Цвет текста и фона
- •Рамка вокруг поля
- •Изменение курсора мыши
- •Выравнивание текста
- •Меню Добавление меню
- •Позиционирование элементов управления в форме
- •Привязка к сетке
- •Настройка взаимного расположения элементов формы
- •Выравнивание
- •Установка размеров
- •Установка промежутков между элементами
- •Шрифт на кнопке
- •Выравнивание текста
- •Стиль кнопки
- •Блокирование кнопки
- •Изображение на поверхности кнопки
- •Фоновое изображение для кнопки
- •Списки.
- •Список ListBox
- •Список CheckedListBox
- •Список DomainUpDown
- •Элемент управления NumericUpDown
- •Элемент управления TrackBar
- •Форма и клавиша табуляции
- •Установка порядка передачи фокуса при нажатии клавиши Tab
- •Свойство TabStop
- •Вложенные элементы управления и контейнеры
- •Применение элементов управления Group Box и Panel
- •Элемент управления TabControl
- •Стыковка и фиксация элементов управления
- •Свойство Anchor
- •Свойство Dock
- •Обработка событий
- •Проверка данных вводимых пользователем
- •Применение свойств элемента управления TextBox к проверке данных вводимых пользователем
- •Применение событий для проверки на уровне поля
- •События KeyDown и KeyUp
- •Событие KeyPress
- •Работа с фокусом ввода
- •Проверка на уровне формы
- •Оповещение пользователя об ошибках ввода
- •Компонент ErrorProvider
- •Отображение сообщений об ошибках
- •Тема Графика в c#.
- •Контекст отображения
- •Класс Graphics
- •Событие Paint
- •Тема Методы и свойства класса Graphics. Рисование геометрических фигур Рисование линии (DrawLine)
- •Набор линий (DrawLines)
- •Рисование прямоугольника(DrawRectangle )
- •Набор прямоугольников (DrawRectangles )
- •Рисование многоугольника (DrawPolygon)
- •Рисование эллипса(DrawEllipse )
- •Результат работы метода DrawEllipse Рисование сегмента эллипса (DrawArc)
- •Рисование замкнутого сегмента эллипса(DrawPie)
- •Рисование кривых Безье (DrawBezier и DrawBeziers )
- •Рисование канонических сплайнов (DrawCurve и DrawClosedCurve)
- •Рисование закрашенных фигур.
- •Тема. Инструменты для рисования
- •Инструмент для рисования перо (Pen) и его свойства
- •Инструмент для рисования кисть (Brush)
- •Кисть SolidBrush
Событие Paint
Если изменить размеры окна предыдущего изображения часть рисунка пропадает. Аналогичная неприятность происходит и в том случае, когда окно приложения перекрывается окном другого приложения. Дело в том, что в приложении не реализована техника рисования в окне, применяемая во всех стандартных приложениях Microsoft Windows. По своей логике способ рисования программ Microsoft Windows в корне отличается от способа, к которому привыкли разработчики, создававшие программы для ОС MS-DOS.
Известно, что приложения Microsoft Windows не могут выводить текст или графику ни с помощью стандартных функций библиотеки компилятора, например таких, как printf, cprintf или putc. Не помогут и прерывания BIOS, так как приложениям Microsoft Windows запрещено их использовать (во всяком случае, для вывода на экран). Все эти функции ориентированы на консольный вывод в одно-единственное окно, предоставленное в полное распоряжение программе MS-DOS.
В ОС Microsoft Windows параллельно работающие приложения должны совместно использовать один общий экран монитора. Для этого они создают перекрывающиеся и перемещаемые окна, в которые и выполняют вывод текста или графических изображений. ОС Microsoft Windows берет на себя все проблемы, связанные с возможным перекрытием или перемещением окон, так что правильно спроектированные приложения не должны специально заботиться о восстановлении содержимого окна после его перекрытия другим окном.
Способ, которым приложение Microsoft Windows выводит что-либо в свои окна, коренным образом отличается от способа, используемого в программах MS-DOS.
Программа MS-DOS формирует изображение на экране «рассредоточенным» образом, то есть в любом месте программы могут вызываться функции, которые выводят что-либо на экран. Например, сразу после запуска программа может нарисовать на экране диалоговую панель, а затем в любой момент времени и, что самое главное, из любого места программы модифицировать ее.
Приложения Microsoft Windows также могут выводить в созданные ими окна текст или графические изображения в любой момент времени и из любого места. Именно так поступает наше приложение. Однако обычно разработчики поступают по-другому.
Для форм класса System.Windows.Forms предусмотрен удобный объектно-ориентированный способ, позволяющий приложению при необходимости перерисовывать окно формы в любой момент времени. Когда вся клиентская область окна формы или часть этой области требует перерисовки, форме передается событие Paint. Все, что требуется от программиста, это создать обработчик данного события, наполнив его необходимой функциональностью.
Для наглядной демонстрации методики обработки события Paint мы подготовим простейшее приложение PaintApp, рисующее в своем окне текстовую строку и геометрические фигуры.
Пример. Создадим приложение, которое выводило бы на экран форму следующего вида (рис.)
Рис. Результат работы программы.
Для того чтобы заголовок окна поменял название при загрузке окна, необходимо поменять для него свойство Text в обработчике события Load. При этом стоит отметить, что событие Load является событием форму по умолчанию и для перехода к его обработчику достаточно дважды кликнуть мышью на форму.
private void Form1_Load(object sender, EventArgs e)
{
this.Text = "Событие Paint";
}
Рассмотрим обработчик события Paint.
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
string text = "Событие Paint";
g.Clear(Color.White);
g.DrawString(text, new Font("Helvetica", 15),Brushes.Red, 50, 0);
g.DrawRectangle(new Pen(Brushes.Blue, 2), 10, 30, 200, 100);
g.DrawEllipse(new Pen(Brushes.Green, 2), 10, 30, 200, 100);
}
Обработчику Form1_Paint передаются два параметра.
Через первый параметр передается ссылка на объект, вызвавший событие. В нашем случае это будет ссылка на форму Form1. Что же касается второго параметра, то через него передается ссылка на объект класса PaintEventArgs. Этот объект имеет два свойства, доступных только для чтения — Graphics и ClipRectangle.
Класс Graphics уже знаком — он представляет собой контекст отображения, необходимый для рисования текста и геометрических фигур. Обработчик события Paint получает контекст отображения через свои параметры, поэтому программисту не нужно определять его специальным образом.
Через свойство ClipRectangle передаются границы области, которую должен перерисовать обработчик события Paint. Эти границы передаются в виде объекта класса Rectangle. Свойства этого класса Left, Right, Width и Height, наряду с другими свойствами, позволяют определить расположение и размеры области.
Заметим, что в простейших случаях обработчик события Paint может игнорировать свойство ClipRectangle, перерисовывая содержимое окна полностью. Однако процесс перерисовки содержимого окна можно заметно ускорить, если перерисовывать не все окно, а только область, описанную свойством ClipRectangle. Ускорение будет особенно заметным, если в окне нарисовано много текста и геометрических фигур.
Рассмотрим содержание обработчика события Paint. Здесь в теле обработчика Form1_Paint мы определили локальную переменную g класса Graphics, предназначенную для хранения контекста отображения. Эта переменная инициализируется при помощи значения, полученного из свойства Graphics первого параметра обработчика Form1_Paint:
Graphics g = e.Graphics;
Получив контекст отображения, наш обработчик события Paint может рисовать в соответствующем окне все, что угодно.
Вначале мы закрашиваем окно белым цветом, вызывая для этого метод Clear, определенный в классе Graphics:
g.Clear(Color.White);
Таким способом мы можем закрасить фон, цвет которого задан для формы в свойстве BackColor.
Далее мы вызываем методы DrawString, DrawRectangle и DrawEllipse, также определенные в классе Graphics:
g.DrawString(text, new Font("Helvetica", 15),Brushes.Red, 50, 0);
g.DrawRectangle(new Pen(Brushes.Blue, 2), 10, 30, 200, 100);
g.DrawEllipse(new Pen(Brushes.Green, 2), 10, 30, 200, 100);