- •1. Вводная часть
- •2. Знакомство со средой разработки на примере создания простого консольного приложения
- •3. Модификация консольного приложения
- •4. Публикация
- •5. О приложении к Лабораторной работе № 1
- •Лабораторная работа № 2: Создание простого приложения Windows Forms
- •Создание простого приложения Windows Forms
- •Модификация приложения Windows Forms
- •Завершающая часть
- •2. Создание простого приложения Windows Forms
- •3. Модификация приложения Windows Forms
- •4. Завершающая часть
- •5. О приложении к Лабораторной работе № 2
- •3. Лабораторная работа № 3: Windows Forms и использование некоторых элементов управления Лабораторная работа № 3: Windows Forms и использование некоторых элементов управления
- •Вводная часть
- •О приложении к Лабораторной работе № 3
- •1. Вводная часть
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms
- •4. Модификация приложения Windows Forms: элемент управления MenuStrip
- •5. Модификация приложения Windows Forms: элемент управления Button
- •6. Модификация приложения Windows Forms: элемент управления ToolTip
- •7. Модификация приложения Windows Forms: элемент управления ComboBox
- •8. Модификация приложения Windows Forms: элемент управления WebBrowser
- •9. Модификация приложения Windows Forms: добавляем исходный код
- •10. Завершающая часть
- •11. О приложение к Лабораторной работе № 3
- •4. Лабораторная работа № 4: Windows Forms — работа с формами Лабораторная работа № 4: Windows Forms — работа с формами
- •Вводная часть
- •О приложении к Лабораторной работе № 4
- •1. Вводная часть
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms
- •4. Модификация приложения Windows Forms: добавление новой формы
- •5. Модификация приложения Windows Forms: динамическое связывание параметров двух форм и передача параметра через прямой доступ к элементу формы
- •6. Модификация приложения Windows Forms: динамическое связывание параметров двух форм и передача параметра через передачу метода в конструктор формы
- •7. Модификация приложения Windows Forms: динамическое связывание параметров двух форм и передача параметра через класс делегата
- •8. Модификация приложения Windows Forms: динамическое связывание параметров двух форм и передача параметра через свойства
- •9. Завершающая часть
- •10. О приложении к Лабораторной работе № 4
- •5. Лабораторная работа № 5: Windows Forms — элементы управления Лабораторная работа № 5: Windows Forms — элементы управления
- •Вводная часть
- •О приложении к Лабораторной работе № 5
- •1. Вводная часть
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms
- •4. Модификация приложения Windows Forms: динамическое добавление и уничтожение элемента управления
- •5. Модификация приложения Windows Forms: стандартные диалоговые окна
- •6. Модификация приложения Windows Forms: открытие файла, сохранение файла и работа с текстом
- •7. Модификация приложения Windows Forms: прочее
- •8. Завершающая часть
- •9. О приложении к Лабораторной работе № 5
- •Лабораторная работа № 6: SolidWorks — работа с SolidWorks
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: eDrawings 2012
- •4. Модификация приложения Windows Forms: организация работы с SolidWorks через приложение
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 6
- •Лабораторная работа № 7: SolidWorks — использование SwCSharpAddin, работа с макросом и шаблоном детали
- •2. Создание приложения SwCSharpAddin
- •3. Модификация приложения SwCSharpAddin: макрос отрисовки болта
- •4. Модификация приложения SwCSharpAddin: построение через шаблон детали
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 7
- •8. Лабораторная работа № 8: Создание простого приложения Windows Foundation Presentation Лабораторная работа № 8: Создание простого приложения Windows Foundation Presentation
- •Вводная часть
- •О приложении к Лабораторной работе № 8
- •1. Вводная часть
- •2. Создание приложения Windows Foundation Presentation
- •3. Модификация приложения Windows Foundation Presentation
- •4. Модификация приложения Windows Foundation Presentation: добавление нового элемента из библиотеки компонентов wpf
- •5. Модификация приложения Windows Forms: расширение функциональности приложения и работа с оформление
- •6. Модификация приложения Windows Foundation Presentation: различные возможности wpf
- •7. Модификация приложения Windows Foundation Presentation: немного о стилях и шаблонах
- •8. Завершающая часть
- •9. О приложении к Лабораторной работе № 8
- •Лабораторная работа № 9: Создание приложения-презентации Windows Foundation Presentation
- •2. Создание приложения Windows Foundation Presentation
- •3. Модификация приложения Windows Foundation Presentation
- •4. Модификация приложения Windows Foundation Presentation: работа с решением в Expression Blend
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 9
- •Лабораторная работа № 10: Работа с базами данных — xml и ole
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: odbc
- •4. Модификация приложения Windows Forms: ole
- •5. Модификация приложения Windows Forms: xml
- •6. Завершающая часть
- •7. О приложении к Лабораторной работе № 10
- •Лабораторная работа № 11: Динамическая связь приложений через библиотеку классов
- •2. Удалённый объект: создание библиотеки классов удалённого объекта
- •3. Клиент: создание приложения Windows Forms
- •4. Сервер: создание консольного приложения
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 11
- •Лабораторная работа № 12: Автоматизация Microsoft Office Word
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: создание и заполнение нового документа Microsoft Word
- •4. Модификация приложения Windows Forms: работа с шаблонами
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 12
- •Лабораторная работа № 13: Автоматизация Microsoft Office Excel
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: создание и заполнение нового документа Microsoft Excel
- •4. Модификация приложения Windows Forms: чтение данных с документа Microsoft Excel
- •5. Модификация приложения Windows Forms: прочие возможности Microsoft Excel
- •6. Завершающая часть
- •7. О приложении к Лабораторной работе № 13
- •Лабораторная работа № 14: Простой растровый редактор
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: подготовка интерфейса редактора
- •4. Модификация приложения Windows Forms: функциональность растрового редактора
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 14
- •15. Лабораторная работа № 15: Векторный редактор изображений Лабораторная работа № 15: Векторный редактор изображений
- •Вводная часть
- •О приложении к Лабораторной работе № 15
- •1. Вводная часть
- •2. Создание решения, приложения Windows Forms и библиотеки классов
- •3. Модификация приложения Windows Forms: подготовка интерфейса редактора и добавление файлов ресурсов
- •4. О будущей функциональности векторного редактора изображений
- •5. Модификация приложения Windows Forms: подготовка библиотеки классов
- •6. Модификация приложения Windows Forms: функциональность векторного редактора
- •7. Завершающая часть
- •8. О приложении к Лабораторной работе № 15
- •Лабораторная работа № 16: Windows Communication Foundation
- •2. Создание приложения wcf:
- •3. Модификация приложения wcf: приложение-клиент для wcf-службы
- •4. Создание приложения Windows Forms: сервер чата на wcf
- •5. Создание приложения Windows Forms: клиент чата на wcf
- •6. Завершающая часть
- •7. О приложении к Лабораторной работе № 16
- •Лабораторная работа № 17: Знакомство с Silverlight
- •2. Создание приложения Silverlight:
- •3. Модификация приложения Silverlight: первые шаги и полноэкранный режим
- •4. Модификация приложения Silverlight: простой проигрыватель mp3-файлов
- •5. Модификация приложения Silverlight: работа с анимацией
- •6. Завершающая часть
- •7. О приложении к Лабораторной работе № 17
- •Лабораторная работа № 18: Знакомство с asp.Net
- •2. Создание веб-приложения asp.Net
- •3. Модификация веб-приложения asp.Net: реализация различной функциональности
- •4. Модификация веб-приложения asp.Net: ajax
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 18
- •Вводная часть
- •О приложении к Лабораторной работе № 19
- •1. Вводная часть
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: подготовка интерфейса и добавление TabControl
- •4. Модификация приложения Windows Forms: вкладка «Просто фон!»
- •5. Модификация приложения Windows Forms: вкладка «Объекты и градиент»
- •6. Модификация приложения Windows Forms: вкладка «Мой монитор сломался!»
- •7. Модификация приложения Windows Forms: вкладка «Векторные часы»
- •8. Модификация приложения Windows Forms: вкладка «Огонь!!!»
- •9. Модификация приложения Windows Forms: вкладка «Дождик»
- •10. Завершающая часть
- •11. О приложении к Лабораторной работе № 19
- •Лабораторная работа № 20: Inventor — работа с Inventor
- •Вводная часть
- •О приложении к Лабораторной работе № 20
- •1. Вводная часть
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: запуск и завершение приложения Inventor
- •4. Модификация приложения Windows Forms: создание новых документов
- •5. Модификация приложения Windows Forms: доступ к элементам документов Inventor
- •6. Завершающая часть
- •7. О приложении к Лабораторной работе № 20
- •Лабораторная работа № 21: Знакомство с языком f# (Эф-шарп) на примере простого приложения для командной строки
- •Вводная часть
- •О приложении к Лабораторной работе № 21
- •1. Вводная часть
- •2. Основные положения при работе с f#
- •3. Создание приложения «Учебник по f#»
- •4. Создание консольного приложения
- •5. О приложении к Лабораторной работе № 21
- •Лабораторная работа № 22: Различные примеры на f#
- •2. Создание приложения «Приложение f#»
- •3. Модификация приложения f#: match
- •4. Модификация приложения f#: создание форм и рисование объектов на форме
- •5. Модификация приложения f#: работа с базой данных Microsoft Access
- •6. О приложении к Лабораторной работе № 22
- •23. Дополнительная лабораторная работа № 1
- •24. Дополнительная лабораторная работа № 2
- •25. Дополнительная лабораторная работа № 3
- •Вводная часть
- •1. Вводная часть
- •2. Создание приложения Windows Foundation Presentation
- •3. Модификация приложения Windows Foundation Presentation: добавление ресурсов
- •4. Модификация приложения Windows Foundation Presentation: добавление исходного кода
- •5. Модификация приложения Windows Foundation Presentation: оформление элемента ListBox
- •6. Завершающая часть
- •7. О приложении к данной работе
3. Модификация консольного приложения
Для начала произведём небольшую настройку среды разработки для большего удобства прочтения исходного кода. Для этого выполним Сервис -> Параметры… -> Текстовый редактор -> C# -> Показывать: Номера строк.
Теперь слева в окне исходного кода отображаются номера строк для кода C#:
Рис. 3. 1. Отображение номера строки
Теперь модифицируем исходный код. Наиболее простая модификация, это вывод какой-либо фразы в консольном приложении. Сделаем это:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LWP01Console
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!");
Console.ReadKey();
}
}
}
Мы добавили всего три строчки:
Console.WriteLine("Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!");
Console.ReadKey();
Console.Clear();
Скомпилируем это приложение, в результате увидим следующее (Рис. 3. 2.):
Рис. 3. 2. Модифицированное консольное приложение
Теперь усложним приложение, добавив следующий исходный код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LWP01Console
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!");
Console.ReadKey();
Console.Clear();
//
Console.WriteLine("Пожалуйста, введите символы:\n");
String a;
a = Console.ReadLine();
Console.WriteLine("\n\tВы ввели символ: " + a + ".");
Console.ReadKey();
Console.Clear();
//
Console.WriteLine("Пожалуйста, введите число элементов массива:\n");
int x = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\nПожалуйста, введите элемент массива:\n");
string[] m1 = new string[x];
int i;
for (i = 0; i < m1.GetLength(0); i++)
{
Console.Write("Элемент {" + i + "}: ");
m1[i] = Console.ReadLine();
}
Console.WriteLine("\n\tВаш массив:");
for (i = 0; i < m1.GetLength(0); i++)
{
Console.Write("\t" + m1[i]);
Console.WriteLine();
}
Console.ReadKey();
}
}
}
Скомпилируем его и проверим работоспособность. Теперь поясним исходный код. Для удобства, исходный код поделим на части символом комментариев (//).
Теперь программа выполняет три итерации. Первая итерация сначала выводит строку (Рис. 3. 2.). Вторая итерация предлагает нам ввести эту строку самим, затем выводит её на экран. И третья итерация позволяет нам ввести число элементов одномерного массива, заполнить его и тоже вывести на экран. После каждой итерации экран очищается.
Рис. 3. 3. Результат работы третьей итерации работы консольного приложения
Поясним исходный код к каждой итерации. Ключевые слова подсвечены синим. В самом начале кода мы видим следующую строку:
using System;
Библиотеки классов .NET Framework образуют иерархическую структуру пространств имён (namespaces). Это может привести к довольно длинным именам, если требуемый класс или тип имеет очень большую глубину вложения. Чтобы сократить ввод длинных имён, в C# введена директива using. Посмотрим работу этой директивы на примере. В нашем приложении есть такая строка:
Console.WriteLine("Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!");
Если бы изначально мы не подключали ссылки, эта строка выглядела бы так:
System.Console.WriteLine("Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!");
Ввод такого текста несложен, а представим, что у нас большое приложение с обширным набором типов и классов. Директива using позволяет компилятору найти непонятный ему элемент, просматривая указанное пространство имен. В данной работе директива using используется так:
using System;
…
namespace LWP01Console
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!");
В ходе синтаксического анализа метода Console.WriteLine компилятор установит, что этот метод не описан. Поэтому он примется просматривать пространства имён, заданные директивой using, и, найдя описание метода в пространстве имён System, завершит компиляцию кода без ошибок.
И так, директива using это зарезервированное слово в языке Си-шарп. Она используется в двух случаях:
разрешает использование типов в пространстве имён, поэтому уточнение использования типа в этом пространстве имён не требуется: using System.Text;
позволяет создавать псевдонимы пространства имен или типа. Это называется директива using alias и выглядит примерно так: using Project = PC.MyCompany.Project;
Ключевое слово using также используется для создания операторов using, которые обеспечивают правильную обработку объектов IDisposable, например файлов и шрифтов.
Как видим, также как и в C и C++ язык унаследовал символ «;» (точка с запятой) как символ разделения операторов, однако можно писать код и без этого разделителя (частично).
Директива using применима к пространствам имён, но не к классам. В нашем примере System является пространством имён, Console — классом, a WriteLine — статическим методом класса Console. Поэтому такой код неверен:
using System.Console; // Нельзя использовать директиву using по отношению к классу
//...
namespace LWP01Console
{
class Program
{
static void Main(string[] args)
{
WriteLine("Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!");
Указывать класс в директиве using нельзя, но существует вариант директивы using, позволяющий создать псевдоним для класса:
using <псевдоним> = <класс>;
Благодаря этой форме директивы using можно написать подобный код:
using Console2011 = System.Console;
//...
class Program
{
static void Main(string[] args)
{
Console2011.WriteLine("Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!");
Немного об универсальном программировании:
Описание класса в С# должно содержать встроенное (inline) описание всех методов — в этом языке заголовочных файлов не бывает (в отличие например от C и C++). Благодаря этому правилу разработчики классов могут создавать высоко мобильный код, что является одной из ключевых концепций среды .NET. Создавая Си-шарп-класс, в конце концов, разработчик имеет полностью инкапсулированную связку функциональных возможностей, которую можно легко перенести в любую среду разработки, и ему не нужно беспокоиться, как в другом языке обрабатываются включаемые файлы, и существует ли в нём вообще механизм включения файлов. Такой подход — универсальное программирование («one-stop programming») — позволяет, например, перебросить весь класс на страницу ASP (Active Server Pages), и он будет функционировать так, будто был скомпилирован для обычного приложения.
namespace LWP01Console
{
class Program
Здесь мы видим имя класса и пространства имён. Автоматически (при создании консольного приложения средой разработки) было выбрано пространство имён LWP01Console, и имя класса, который описывает проблемную область. В нашем случае это Program. Начало и окончание описания класса отмечается фигурными скобками — открывающей «{» и закрывающей «}» соответственно. Всё, что внутри них, считается частью класса. Заметим: в нашем случае класс называется Program, а всё, что есть в приложении, описано в контексте этого класса.
Все члены класса описываются внутри фигурных скобок: методы, поля, свойства, индексаторы (indexers), атрибуты и интерфейсы.
Создание пространства имён указывается ключевым словом namespace. Объявляемые пространства имён могут использоваться для структурирования программы. Например:
namespace Name01.Name02
{
class A { }
}
namespace Name03
{
using Name01.Name02;
class B : A { }
}
Идём дальше по коду:
static void Main(string[] args)
Каждое приложение на C# должно иметь метод с именем Main(), описанный в одном из его классов. Не имеет значения, в каком классе находится этот метод: классов, может быть столько, сколько нужно для вашего приложения. Главное, чтобы в каком-нибудь классе был метод с именем Main. Кроме того, этот метод должен быть описан как открытый (public) и статический (static). Ключевое слово public является модификатором доступа, который сообщает компилятору Си-шарп, что этот метод может вызвать кто угодно. Ключевое слово static означает, что метод является глобальным и что для его вызова не требуется создавать экземпляр этого класса. Это очень важно, так как иначе компилятор не знал бы, как или когда создавать экземпляр вашего класса. Раз метод статический, компилятор сохранит адрес метода как точку входа, и среда .NET начнёт с него выполнение приложения.
Следующие строчки кода таковы:
Console.WriteLine("Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!");
Console.ReadKey();
Console.Clear();
Если System — это пространство имён, Console — класс, определённый в этом пространстве, то метод, WriteLine1 — метод определённый в этом классе.
Класс Console содержит следующие методы, позволяющие осуществлять чтение и запись символов из потоков ввода/вывода:
Read — чтение символов из потока ввода.
ReadLine — чтение строки символов из потока ввода.
Write — запись строки символов в поток вывода.
WriteLine — запись в поток вывода строки символа, ограниченной символами конца строки.
ReadKey — получает следующий нажаты пользователем символ или функциональную клавишу. Нажатая клавиша отображается в окне консоли. Используем этот метод для остановки выполнения консольного приложения (для отображения выполненных действий приложений).
Clear — удаляет из буфера консоли и её окна отображаемую информацию.
ПРИМЕЧАНИЕ № 1: Описания применяемых в данной работе методов также можно посмотреть, наведя курсор на нужное слово методе.
//
Console.WriteLine("Пожалуйста, введите символы:\n");
String a;
a = Console.ReadLine();
Console.WriteLine("\n\tВы ввели символ: " + a + ".");
Console.ReadKey();
Console.Clear();
Двойной правый слеш — комментарии (зелёные). Также комментарии можно задавать так:
/* Текст комментария */
В остальном, здесь всё просто. Объявляем переменную «a» (строковая — String или string), выполняем считывание символов с клавиатуры (ReadLine) и выводим введённый символ в потоке с переводом строки. Конструкция «+ a +» служит для подстановки переменной «a» в поток символов для вывода в окне консольного приложения.
\n определяется как перевод курсора на следующую строку.
\t определяется как символ табуляции в окне консоли.
Последний участок кода (третья итерация):
//
Console.WriteLine("Пожалуйста, введите число элементов массива:\n");
int x = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\nПожалуйста, введите элемент массива:\n");
string[] m1 = new string[x];
int i;
for (i = 0; i < m1.GetLength(0); i++)
{
Console.Write("Элемент {" + i + "}: ");
m1[i] = Console.ReadLine();
}
Console.WriteLine("\n\tВаш массив:");
for (i = 0; i < m1.GetLength(0); i++)
{
Console.Write("\t" + m1[i]);
Console.WriteLine();
}
Console.ReadKey();
Console.Clear();
Здесь идёт объявление переменной «x» и присваивание отконвертированного числа введённого с клавиатуры в int (32-битное число со знаком). Конвертирование производится методом Convert (преобразует значение одного базового типа данных к другому базовому типу данных), который использует ToInt32 (преобразует заданное строковое представление числа в эквивалентное 32-разрядное знаковое целое число). Далее мы объявляем строковый одномерный массив (string[]) где число элементов задаётся по числу в переменной «x» (индекс начинается с нуля) и в цикле (ключевая последовательность i < m1.GetLength(0), где метод получает 32-разрядное целое число, представляющее количество элементов в заданном измерении массива — в нашем массиве одно измерение, которое мы пдоставляем в метод под цифрой «0»). В теле цикла мы последовательно вводим символы элемента массива (m1[i]). Второй цикл делает обратную операцию6 выводит нш массив.
Немного поясним несколько простых правил при написании кода, так как зачастую подобные ошибки наиболее часто встречаемы и как следствие наиболее неприятны.
Во-первых, C# позволяет писать код свободно, но каждый оператор должен заканчивать точкой с запятой2. Также можно написать код приложения даже в одну строчку2.
Во-вторых, C# чувствителен к регистру. А это значит что «ConsolE», «Static» и «Public» могут вызвать ошибки. Также важно понимать, что это касается и переменных и операторов.
ПРИМЕЧАНИЕ № 2: Однако, не всегда точка с запятой обязана быть. Например, конструкция без точек с запятой ниже, выдаст сообщение с тремя кнопками. Вставим этот код, в наше консольное приложение предварительно добавив ссылку System.Windows.Forms (Рис. 3. 4.):
Рис. 3. 4. Добавление новой ссылки System.Windows.Forms
while (System.Windows.Forms.MessageBox.Show("Hello World without ';'! Привет мир без точек с запятой!", "This is My First Message Box!", System.Windows.Forms.MessageBoxButtons.YesNoCancel) != System.Windows.Forms.DialogResult.Yes){}
Рис. 3. 5. Результат работы кода без точек с запятой (нужно нажать «Да»)