Язык c# — Проблемы с Visual Studio


Работа с Visual Studio

Профессиональные разработчики программного обеспечения .NET наверняка располагают самым серьезным в этой сфере продуктом производства Microsoft, который называется Visual Studio и доступен по адресу www.visualstudio.com. Этот продукт представляет собой самую функционально насыщенную и наиболее приспособленную под использование на предприятиях IDE-среду. Такая мощь, несомненно, имеет свою цену, которая варьируется в зависимости от версии Visual Studio. Как не трудно догадаться, каждая версия поставляется со своим уникальным набором функциональных возможностей.

Visual Studio представляет собой полностью интегрированную среду разработки. Она спроектирована таким образом, чтобы делать процесс написания кода, его отладки и компиляции в сборку для поставки конечным потребителям как можно более простым. На практике это означает, что Visual Studio является очень сложным приложением с многодокументным интерфейсом, в котором можно делать практически все, что касается разработки кода. Ниже перечислены основные возможности Visual Studio:

Текстовый редактор

С помощью этого редактора можно подготавливать тексты программ на языке C# (а также Visual Basic и С++). Текстовый редактор обладает довольно мощными возможностями. Например, при вводе текста программы он автоматически компонует его на странице, создавая между строками необходимые отступы, выравнивая открывающие и закрывающие фигурные скобки блоков кода и выделяя ключевые слова цветом. Кроме того, по мере ввода кода он выполняет его проверку на предмет синтаксических ошибок и подчеркивает фрагменты, которые будут вызывать ошибки при компиляции, что также называется отладкой на стадии проектирования. В редакторе реализовано средство IntelliSense, которое обеспечивает автоматическое отображение имен классов, полей или методов при начале их ввода, а также списки параметров, которые поддерживают все доступные перегруженные версии методов при начале ввода параметров для методов.

Визуальный редактор форм

Этот редактор позволяет размещать желаемые элементы управления для пользовательского интерфейса и доступа к данным в проекте, a Visual Studio затем автоматически добавляет в исходные файлы код на языке C#, который необходим для создания экземпляров этих элементов в проекте. (Это возможно потому, что все элементы управления в .NET представляют собой экземпляры определенных базовых классов.)

Вспомогательные окна

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

Возможность компиляции прямо в среде разработки

Вместо того чтобы выполнять компиляцию проекта, запуская компилятор C# из командной строки, можно выбрать соответствующий пункт меню в среде разработки. Visual Studio самостоятельно вызывает компилятор и передает ему все необходимые параметры командной строки, указывающие, на какие сборки должен ссылаться код и какой вид должна иметь сборка на выходе (например, исполняемый файл или библиотека *.dll). При желании Visual Studio может также автоматически запускать скомпилированный исполняемый файл на выполнение, позволяя проверить его работу.

Интегрированный отладчик

Из-за природы программирования код редко когда выполняется правильно с первого раза. Visual Studio обеспечивает гладкое подключение отладчика, позволяя создавать точки останова и отслеживать значения переменных, не покидая среду разработки.

Доступ к другим программам

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

Интегрированная справочная система MSDN

Visual Studio позволяет получать доступ к документации MSDN прямо из среды IDE. В случае, например, возникновения сомнений по поводу предназначения того или иного ключевого слова во время работы с текстовым редактором, можно выделить это ключевое слово и нажать клавишу , в результате чего Visual Studio автоматически подключится к MSDN и отобразит подходящие разделы справки. Аналогично, если нужно посмотреть, что означает та или иная ошибка компиляции, потребуется выделять сообщение с ошибкой и нажать .

Также Visual Studio содержит графические редакторы и конструкторы XML, обеспечивает поддержку разработки программ Windows, ориентированных на мобильные устройства, поддержку разработки программ Microsoft Office и Windows Workflow Foundation, содержит встроенную поддержку рефакторинга кода и инструменты визуального конструирования классов.

C# и Я

Отладка приложений C# в Visual Studio.

Отладка программ – это, наверное, один из самых важных этапов разработки. Думаю, что каждый из нас хоть раз сталкивался с такими ситуациями, когда программа вела себя не так как это было задумано изначально – возвращала совершенно не тот результат расчёта, выводила не тот текст, выбрасывала сообщения об ошибке во время работы и т.д. и т.п. Практически все современные IDE имеют в своем составе встроенные мощные средства и инструменты для отладки приложений,
Visual Studio – не исключение.

Сегодня рассмотрим основы отладки приложений в Visual C# 2010 и посмотрим, как пользоваться некоторыми инструментами для того, чтобы сделать отладку максимально удобной и быстрой.

Фиксация ошибок на этапе разработки.

С этой функцией Visual Studio может столкнуться кто угодно, в особенности новички в том или ином языке программирования. В случае, если на этапе написания какого-либо кода программист допускает ошибку, которая может быть проанализирована ещё ДО компиляции и запуска программы – Visual Studio об этом сообщит в окне “Список ошибок”. На следующем рисунке представлен пример вывода сообщения об ошибке – в коде отсутствует точка с запятой:

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

Фиксация ошибок на этапе выполнения программы

Допустим, что код у нас написан правильно с точки зрения синтаксиса, все объекты правильно определены и Visual Studio готова запустить программу на выполнение. Довольно часто могут возникать ситуации, когда на этапе выполнения программы в какой-либо метод передается неверный параметр, скажем, в качестве пути к локальной базе данных, может случайно передаться пустая строка – в этом случае обязательно возникнет исключительная ситуация. Такие моменты студия также фиксирует, если приложение запускается из среды IDE. Например, на следующем рисунке показан вывод сведений об ошибке, рассмотренной выше – я специально передал в качестве пути к локальной БД пустую строку и никак не защитил опасный код:

Как видите, VS выводит окно, в котором дается небольшое пояснение об исключительной ситуации. Здесь Вы можете:

  • просмотреть сведения об ошибке в справочных материалах.
  • поискать решение проблемы в сети.
  • просмотреть сведения об ошибке.
  • скопировать сведения исключения в буфер обмена.

При выборе опции “Просмотр сведений” откроется ещё одно окно в котором сдержится подробная информация об исключительной ситуации:

Сведения об этой исключительной ситуации при запуске программы не через VS выглядят так:

Как видите Visual Studio дает вполне исчерпывающий ответ на то, какая исключительная ситуация произошла, а также может попробовать найти возможное решение проблемы. Что если этих сведений нам окажется недостаточно? В этом случае мы приступим как раз к работе с отладчиком и будем искать проблему самостоятельно.

Работа с отладчиком в Visual C#

Остановимся все на той же ошибке соединения с базой данных. Для решения проблемы нам необходимо узнать текущие значения переменных на момент доступа к БД. Для этого воспользуемся пошаговой отладкой – будем шаг за шагом проверять действия программы и фиксировать значения переменных.

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

Точка останова или breakpoint – это преднамеренная остановка выполнения программы, при котором выполняется вывод отладчика.

Чтобы установить breakpoint необходимо установить курсор на нужной строке и выбрать в меню “Отладка – Точка останова” или нажать [F9]. При этом строка с точкой останова будет помечена:

Для примера, я решил вначале остановиться на предшествующей ошибке строке. Теперь запускаем программу из IDE, нажав [F5]. Как только выполнение программы дойдет до точки останова – выполнение прервется и запустится отладчик. При этом вид строки на которой произошла остановка будет следующим:

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

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

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

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

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

Теперь, когда м закрепили окно с информацией отладчика и нашли проблему, можно попробовать её исправить. Для этого останавливаем выполнение программы, нажав [Shift+F5] – окно с информацией отладчика исчезнет. Исправляем ошибку, в нашем случае достаточно передать в переменной путь к БД. Снова запускаем программу через [F5] и смотрим на вывод отладчика:

На рисунке представлен вывод по объекту connection. Так как мы находимся на строке в которой свойству ConnectionString передается значение, то мы ещё не видим решена ли проблема или нет. Мы, конечно, можем снова вызвать всплывающее окно со значением переменной ConnectStr, а можем поступить иначе – по нажатию клавиши [F11] переместиться на строку ниже и увидеть результат:

Как видно по рисунке те свойства, которые были изменены в окне отладчика выделяются красным цветом. Нажимая [F11] мы можем пошагово пройтись хоть по всей программе и отследить изменения переменных.

Кстати, всю информацию по подсказкам. которые мы с Вами устанавливаем в ходе отладки можно экспортировать в отдельный XML-файл, для чего необходимо в меню выдрать “Отладка – Экспорт подсказок по данным” и потом, в случае необходимости снова импортировать в Visual Studo.

В этом посте мы рассмотрели с Вами только самый-самые основные моменты по работе с отладчиком в Visual C#. На самом деле возможности студии по отладке программ намного мощнее. Но, думаю, что в будущем мы ещё не раз вернемся к теме работы с отладчиком и рассмотрим все возможности отладки программ более подробно.

COM порт Windows. SerialPort. C#.Продолжение.

Для создания Windows приложения будем использовать Microsoft Visual Studio 2012. В более современных версиях Visual Studio всё должно работать аналогично. В версиях младше , следует проверить наличие компонента SerialPort.

Создаем новый проект Visual C # с графическим интерфейсом. Затем, открываем дизайнер форм и размещаем необходимые нам элементы. Я размещу ComboBox для отображения доступных COM портов системы, Button для подключения к порту , Label для отображения принятых данных и компонент SerialPort для работы с COM портом.

У меня получилось так :

Так же не забудьте настроить свойства COM -порта (скорость передачи, чисто бит данных, число стоп-бит и т.д.), при необходимости, что так же делается в дизайнере форм.

В панели событий можете так же настроить обработку события DataReceived , которое происходит при каждом получении данных COM портом. Теперь перейдем к коду. Принцип работы с компонентом SerialPort можете посмотреть в предыдущем уроке.

Вопросы по работе кода можете оставлять в комментариях.

Похожие статьи

COM порт Windows. SerialPort. C#.Продолжение. : 11 комментариев

В 2010 версии тоже есть. А вот в Дельфях нет, приходится инициализировать вручную длинным нудным кодом )))

Да, в плане скорости разработки C# прекрасен)
2010 студии под рукой не было)

Не работает. Создаю элементы, вставляю код. 17 ошибок. В чем может быть проблема?

Будьте добры, приведите код ошибок.

Я разобрался. Все работает! Спасибо!

Добрый день, только начал работать с C# при создании всех элементов формы их переименовывании и добавлении вашего кода вылетает основная ошибка в виде: «Имя SerialPort отсутствует в текущем контексте».
Using SYSTEM.IO.Ports подключен

Здравствуйте!
Это означает что нет переменной с данным названием. Вы добавили на форму соответствующий компонент?

Неужели при приеме данных у вас не возникает вот такая ошибка:
Недопустимая операция в нескольких потоках: попытка доступа к элементу управления ‘label1’ не из того потока, в котором он был создан.

Что бы обеспечить прием данных в C# вообще нужно вот такой сатанинский код писать

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
<
this.Invoke(new EventHandler(DoUpdate)); // Что это такое вообще не понятно…
>

private void DoUpdate(object s, EventArgs e)
<
label1.Text = serialPort1.ReadExisting(); // И вот только теперь нормально считывается в label1
>

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

Нет, ошибки не вылетало.
Однако, Вы правы, вынести прием данных в отдельный поток — хорошая идея.
Если этого не сделать, при получении данных, в моем случае, интерфейс программы просто подвисал, но без ошибок

не обрабатывается событие click У кнопки.
private void connectButton_Click(object sender, EventArgs e) <
connectButton.Text = «…»;
>

Спасибо за инструкции, со многим разобрался.
Даже написал свой COM — COM чат.

Создание приложений на языке Visual C# в среде программирования Visual Studio

Ю.А.Шичкина

Создание приложений на языке Visual C# в среде программирования Visual Studio

Учебное пособие

Братск 2011

Создание приложений на языке Visual C# в среде программирования Visual Studio: Учебное пособие./ Ю.А.Шичкина. – Братск: ГОУ ВПО «БрГУ», 2011. – 157с.

В пособии рассматривается широкий круг вопросов, связанных с разработкой приложений на языке Visual C# в среде программирования Visual Studio. Пособие предназначено для студентов направлений подготовки «Математика и Информатика», «Прикладная математика», «Информационные системы», «Профессиональное обучение», «Прикладная информатика в экономике», «Информационная безопасность».

д.физ.-мат.н, профессор, заведующий кафедрой Прикладной математики и информатики Санкт-Петербургского государственного архитектурно-строительного университета Б.Г.Вагер

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

Печатается по решению издательско-библиотечного совета

Содержание

Введение
1. Основы программирования на языке С#
1.1. Структура программы
1.2. Типы данных в C#
1.3. Переменные и константы
1.4. Управляющие конструкции
1.5. Комментарии
1.6. Массивы
1.7. Исключения
2. Среда Visual Studio
2.1. Общие сведения об основных понятиях платформы .NET Framework
2.2. Контейнеры: проекты и решения
2.3. Типы и расширения файлов в Visual Studio для С#
2.4. Переходы в рамках интегрированной среды разработки
2.5. Типы окон и операции над ними
2.6. Элементы управления
2.7. Панель элементов
2.8. Окно «Свойства»
3. Создание приложений Windows Forms
3.1. Операции над проектами Windows
3.2. Работа с формами
3.2.1. Создание формы Windows Forms
3.2.2. Исключение формы из проекта
3.2.3. Удаление формы из проекта
3.2.4. Добавление формы в проект
3.2.5. Создание дочерней формы
3.2.6. Настройка формы
3.2.6.1. Просмотр кода для формы
3.2.6.2. Создание глобальной переменной класса Form
3.2.6.3. Переименование формы
3.2.6.4. Установка расположения форм Windows Forms на экране
3.2.6.5. Выбор начальной формы в приложении Windows
3.2.6.6. Настройка размера формы Windows Forms
3.2.6.7. Добавление фоновых изображений в формы Windows Forms
3.2.6.8. Отображение модальных и немодальных форм Windows Forms
3.2.6.9. Создание прозрачных форм Windows Forms
3.2.6.10. Изменение границ формы Windows Forms с помощью конструктора
3.2.6.11. Переход между формами
3.2.6.12. Cкрытие и закрытие форм
3.3. Работа с элементами управления Windows Forms
3.3.1. Добавление элементов управления в формы Windows Forms
3.3.2. Изменение размера элементов управления в формах Windows Forms
3.3.3. Определение текста, отображаемого элементом управления Windows Forms
3.3.4. Определение клавиш доступа для элементов управления Windows Forms
3.3.5. Добавление элементов управления, для которых не существует пользовательского интерфейса, в формы Windows Forms
3.3.6. Закрепление элементов управления в формах Windows Forms
3.3.7. Выравнивание нескольких элементов управления в формах Windows Forms
3.3.8. Обработка события клавиши на элементе управления
3.3.9. Обращение к элементу управления на другой форме
3.3.10. Привязка элементов управления в формах Windows Forms
3.4. Элементы управления
3.4.1. Button (кнопка)
3.4.2. Надпись – Label
3.4.3. Поле ввода TextBox
3.4.4. Панель Panel
3.4.5. Таймер Timer
3.4.6. Переключатель CheckBox
3.4.7. Переключатель RadioButton
3.4.8. Группа объектов GroupBox
3.4.9. Списки ComboBox
3.4.10. Рисунки PictureBox
3.4.11. Массив рисунков ImageList
3.4.12. Меню
3.4.12.1. Программное меню MenuStrip
3.4.12.2. Контекстное меню ContextMenuStrip
3.4.13. Панель инструментов ToolStrip
3.4.14. Строка состояния StatusStrip
3.4.15. Таблицы DataGridView
3.4.16. Диалоговые окна OpenFileDialog и SaveFileDialog
3.4.17. Работа с цветами ColorDialog
3.4.18. Шрифты FontDialog
3.4.19. Счетчик DomainUpDown
3.4.20. Счетчик NumericUpDown
3.4.21. Индикатор процесса ProgressBar
3.4.22. Текстовый редактор RichTextBox
3.4.23. Вкладки TabControl
3.4.24. Календарь MonthCalendar
3.4.25. Браузер WebBrowser
3.5. Диалоговое окно MessageBox
3.6. Графика
3.6.1. Методы класса Graphics
3.6.2. Примеры построения графических объектов
3.6.2.1. Кривая Безье
3.6.2.2. Построение треугольника
3.6.2.3. Создание графика функции
3.7. Диаграммы
3.7.1. Установка компонента по работе с диаграммами
3.7.2. Основные методы по работе с компонентом zedGraphControl
3.7.3. Примеры построения диаграмм
Лабораторные работы
1. Основные элементы управления
2. Создание титульной формы
3. Дочерние формы, программное меню
4. Обработка списков в С#
5. Математические функции в C#
6. Обработка ошибок
7. Панель инструментов
8. Таблицы
9. Файлы
10. Отображение HTML-файлов
11. Бестиповые указатели
12. Связные списки
13. Графика
14. Диаграммы
15. Диаграммы. Итоговая работа
Контрольная работа
Список литературы

Введение

Язык C# — это простой, но в тоже время мощный, строго типизированный и объектно-ориентированный язык, позволяющий программистам создавать разнообразные приложения. В среде Visual C# с помощью платформы .NET Framework возможно создание приложений Windows, веб-служб, средств баз данных, компонентов, элементов управления и многое другое.

При помощи Visual C# можно также создавать консольные приложения с простым пользовательским интерфейсом на основе текста.

Одними из базовых дисциплин в программе подготовки бакалавров по направлениям 010400 «Прикладная математика и информатика» со специализацией «Системное программирование», 090900 «Информационная безопасность» с профилем «Безопасность автоматизированных систем» являются курсы «Объектно-ориентированное программирование» и «Визуальное программирование», содержание которых определяется выписками из государственных образовательных стандартов высшего профессионального образования (ГОС ВПО).

В данном учебном пособии рассматриваются основы создания приложения на языке Visual C# в среде программирования Visual Studio.

Весь материал иллюстрируется примерами программ, написанных на языке С# под Windows на платформе .NET.

Целью данного учебного пособия является ознакомление студентов с современными технологиями разработки приложений баз данных на языке С# под Windows на платформе .NET.

Задачей учебного пособия является раскрытие выделенных дидактических единиц на простых и конкретных примерах использования библиотек классов в Windows-приложениях на основе платформы .NET на языке C#, что позволит студентам освоить базовые принципы и методы технологии программирования на современном уровне и поможет применить их в курсовом и дипломном проектировании и в будущей профессиональной деятельности.

Пособие состоит из трех разделов.

В первом разделе рассматриваются основы программирования на языке C#. В этом разделе представлены основные единицы и конструкции языка. При изложении материала предполагалось, что читатели уже знакомы с основами программирования. Целью данного раздела является ознакомление читателя с принципами программирования на языке C# для успешного проектирования приложений в Visual Studio.

Второй раздел посвящен возможностям среды Visual Studio 2008 по разработке приложений на языке C#. Приводятся описания основных составляющих приложения, проектов, решений, файлов и других объектов. В разделе также рассматриваются принципы работы с мастерами и конструкторами, предоставляемых средой и необходимых для разработки приложений с их помощью.

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

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

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

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

1. Основы программирования на языке С#

Структура программы

Определение. Пространство имен (namespace) — концепция, позаимствованная из C++ и позволяющая обеспечить уникальность всех имен, используемых в конкретной программе или проекте.

Используемая версия языка в Visual Studio

Как узнать, какая версия языка C# используется в Visual Studio 2015? Как обновить до последней?

2 ответа 2

Не первый подобный вопрос, поэтому стоит написать подробно.

VisualStudio — это IDE, т.е. всего лишь средство интеграции различных компонент в единую среду для удобной разработки.

Поддержку конкретной версии языка осуществляет компилятор, который в ходит в состав дистрибутива .NET Framework, и только используется студией. Аналогично и MSBuid, для сборки проектов. Фактически это означает, что вы можете писать код в блокноте и собирать ваши проекты без студии, только это неудобно.

Цукерберг рекомендует:  Вакансии Takeprofit Technology

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

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

Основы работы с Visual Studio

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

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

Среда разработки Visual Studio 2008 по сравнению с предыдущей версией 2005 изменилась не так сильно. Изменения можно назвать эволюционными, а не революционными. Но эти эволюционные изменения чувствительно повышают производительность работы программистов. В ведь от вашей производительности зависит и ваша доходность.

Введение в Visual Studio

Среда разработки Visual Studio 2008 позволяет разрабатывать программы на нескольких языках программирования: C++, C#, Visual Basic и ASP .NET. При первом старте вы можете увидеть окно, в котором среда попросит вас указать предпочитаемый вами язык программирования. От вашего выбора зависит, какие типы файлов и проектов будут предлагаться вам при создании нового приложения. Я чаще работаю с C# поэтому в моем случае среда разработки настроена на предпочтения этого языка и его типа проектов будут первыми.

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

•Recent projects – в этом разделе расположен список последних проектов, с которыми вы работали. При первом запуске этот список будет пуст. Внизу списка есть две ссылки для открытия существующего проекта и создания нового проекта.

•Get started – в этом разделе находятся ссылки на разделы файла помощи с информацией для тех, кто впервые работает с Visual Studio или впервые начинает разрабатывать программы.

•Getting started – в этом разделе находятся ссылки на последние документы, связанные со средой разработки и программированием.

•MSDN: Visual C# Headlines – занимает основную часть окна и содержит последние новости из мира предпочитаемого вами языка программирования. В моем случае это Visual C#.

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

— эта кнопка вызывает меню настройки панели.

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

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

— закрыть текущую панель. Ненужные панели, которые вы используете очень редко в своей работе можно закрыть. Если вы пока не знаете, что будет нужно или не нужно, то лучше оставить окна по умолчанию, потому что панели по умолчанию действительно нужны практически постоянно. Если вы закрыли какое-то окно, то впоследствии его можно будет открыть, выбрав название окна в меню View.

Для просмотра всех доступных панелей, желательно сейчас создать какой-либо проект в среде разработке, чтобы вам проще было читать этот документ. В этом случае, вы одновременно сможете читать и видеть результат в собственном окне. Для создания проекта выберите меню File -> New -> Project. Перед вами откроется следующее окно:

С левой стороны представлены различные категории проектов, которые вы можете создавать. Первым в дереве категорий будет раздел с языком программирования, который вы выбрали по умолчанию. Я работаю в основном с C#, поэтому у меня первым идет раздел Visual C#. Выберите его и в основном списке окна вы увидите иконки различных проектов. Для тестирования нам достаточно будет Windows Forms Application. Выделите соответствующую иконку.

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

Работа с решениями (Solution)

Основной панелью, с которой мы познакомимся — панель Solution Explorer – эксплорер решения. Вариант панели для одного из тестовых проектов можно увидеть справа от этого текста. Если у вас эта панель не отображается, то ее можно включить, выбрав меню View –> Solution Explorer.

Все проекты, которые вы будете создавать в Visual Studio, заключаются в решение. Одно решение – это как папка для проектов и может содержать несколько проектов. Это очень удобно, потому что очень часто решения действительно должны состоять из нескольких проектов и благодаря объединению в одном виртуальном пространстве, мы можем работать со всеми этими проектами, как с одним целым.

Например, программа может состоять из исполняемого файла и из библиотеки кода Class Library. Для реализации этого вам придется создать два проекта, каждый из которых будет компилировать свой файл. Объединив оба проекта в одно решение, вы сможете держать их под рукой в окне Solution Explorer и одновременно работать с обоими проектами.

Итак, взглянем на окно Solution Explorer моего тестового примера. В нем содержимое представлено в виде дерева. Корнем дерева выступает имя решения. В данном случае, решение имеет имя FindRecordProject. По умолчанию решения получают такое же имя, как и проект. Чтобы переименовать решение, нужно щелкнуть правой кнопкой по имени решения (по корневому элементу дерева) и в контекстном меню выбрать пункт меню Rename. На месте имени решения появится встроенное поле для редактирования, в котором вы можете ввести новое имя для решения. Ввод имени нужно завершить нажатием клавиши Enter.

Конфигурация решения сохраняется в файле с расширением .sln. Впоследствии, если вы захотите открыть все решение в целом, нужно открывать именно этот файл, а не файлы проектов, такие как csproj. Если же у вас в решении только один проект, то можно открывать файл проекта, решение будет открыто автоматически.

Давайте посмотрим, какие еще команды есть в контекстном меню решения (пример этого меню можно увидеть на рисунке):

•Build Solution – собрать решение. Будут полностью собраны все проекты решения;

•Rebuild Solution – пересобрать решение;

•Clean Solution – очистить решение;

•Batch build – настройка проектов, которые нужно будет пересобрать;

•Configuration Manager – вызывает окно, в котором можно управлять конфигурациями решения;

•Add – этот пункт содержит подпункты, с помощью которых в решение можно добавить дополнительные проекты. Это может быть:

oNew Project – создать новый проект и добавить его в решение. Выбрав это меню, вы увидите окно создания нового проекта, как при выборе меню File -> New -> Project.

oExisting Project – отобразит стандартное окно открытия файла, с помощью которого вы можете найти уже существующий проект в вашей файловой системе и добавить его в решение;

oNew Web Site – позволяет создать проект нового WEB сайта;

oExisting Web Site – добавить в решении существующий сайт;

oNew Item – добавить в решение новый элемент;

oExisting Item – добавить в решение существующий элемент;

oNew Solution Folder – создать новую папку в решении.

•Set StartUp Projects – вызывает окно конфигурации решения, в котором вы можете указать, какой из проектов и как должен запускаться при нажатии клавиши F5 во время разработки;

•Paste – вставить из буфера обмена;

•Rename – переименовать решение;

•Open Folder in Windows Explorer – открыть папку решения в окне проводника Windows;

•Properties – отобразить окно свойств решения.

Рассмотрим некоторые из команд, которые могут представлять для вас наибольший интерес во время разработки. Большинство из рассмотренных команд не требуют дополнительных пояснений, потому что они просто выполняют какое-то простое действие. Например, с первыми тремя пунктами все понятно, они просто вызываются и выполняют свои действия. Интерес вызывает меню Batch Build. Что это такое? Вызвав это меню, перед вами откроется окно настройки сборки, как показано на рисунке справа. Здесь перечислены все проекты решения и указаны возможные конфигурации (вторая колонка списка).

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

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

Слева наверху находится выпадающий список, в котором перечислены конфигурации решения. По умолчанию существует две конфигурации (если только у вас не Visual Studio Express Edition, который не позволяет работать с конфигурациями): Debug и Run. В выпадающем списке есть еще пунктыис помощью которых вы можете создать новые конфигурации или вызвать окно редактирования уже существующих конфигураций.

Следующая команда, которая может заинтересовать вас – Set StartUp Project. Выбрав ее, перед вами откроется окно, в котором вы можете выбрать проект, который должен запускаться при нажатии клавиши F5 во время разработки. Итак, выбрав команду Set StartUp Project, перед вами появиться окно, как показано на рисунке ниже:

Это окно свойств решения, просто оно открыто в разделе Startup Project. Какой это раздел, можно определить по дереву, находящемуся слева. В основной части окна находится три переключателя, с помощью которых вы можете задать, какой проект должен запускаться при нажатии F5:

oCurrent Project – текущий проект;

oSingle startup project – вне зависимости от того, какой сейчас текущий проект, всегда будет запускаться тот, который выбран в выпадающем списке после этого пункта;

oMultiple startup projects – запускаться будут несколько проектов и в списке после пункта вы можете указать, как они должны запускаться. Щелкнув по этой колонке можно выбрать для каждого проекта один из трех вариантов:

None – проект не будет запускаться;

Start – проект будет запущен на выполнение в режиме отладки;

Start without debugging – запустить без отладки.

Если ваше решение состоит из одной библиотеки кода и одного исполняемого файла, то логично было бы выбрать второй пункт (Single startup project) и явно указать проект в решении, который должен запускаться.

Окно свойств решения можно вызвать, если щелкнуть по решению правой кнопкой и выбрать в контекстном меню пункт Properties. Раздел Startup Project, который является наиболее интересным, мы уже рассмотрели. Вторым по значимости, на мой взгляд, является раздел Project Dependencies. В этом разделе вы можете выбрать в выпадающем списке проект, а в основном списке (он на рисунке пуст, потому что решение состоит только из одного проекта) можно указать, от чего зависит наш проект. Например, исполняемый файл может зависеть от библиотеки кода. Это значит, что библиотека кода должна компилироваться раньше, чем исполняемый файл. С помощью зависимостей мы можем указать эту проблему, и среда разработки послушно будет компилировать проекты в соответствии с их зависимостями.

При работе с тестовыми примерами и с маленькими программами программисты не обращают внимания на решения и работают в основном только с проектами. Это не является ошибкой, потому что файл решения – создается просто для вашего удобства. Используйте его там, где необходимо, а если вы не используете его, то можете даже не сохранять или удалять, чтобы он не занимал лишнее место на диске. Хотя, файлы sln настолько маленькие, что проще не обращать на них никакого внимания.

Работа с проектами

Работа с проектом начинается с его создания. Для этого выбираем меню File -> New -> Project. Перед вами откроется окно, как показано на следующем рисунке.

Начнем с правого верхнего угла. Здесь располагается выпадающий список, в котором вы можете выбрать версию платформы .NET, под которую вы создаете проект. Этот выпадающий список имеет смысл только при создании .NET приложения. Если вы создаете MFC или другое Win32 приложение, то выбор .NET платформы не повлияет на проект.

Слева окна находится дерево различных категорий проектов. Я при первом запуске Visual Studio выбрал языком по умолчанию C#, поэтому первым в этом дереве у меня стоит раздел Visual C#. Выбирая разделы, в основной части окна в представлении списка будут появляться иконки шаблонов, которые установлены у вас на диске для данного раздела. Помимо этого, есть еще пункт Search Online Templates…, с помощью которого можно поискать шаблоны в интернете.

Внизу окна располагаются следующие элементы управления:

•Name – в этом поле вы должны указать имя будущего проекта. Таким именем будет назван файл проекта, и если вы создадите новое решение, то и файл решения. По умолчанию, такое же имя будет получать и результирующий файл после компиляции;

•Location – расположение проекта;

•Solution – здесь в выпадающем списке вы можете выбрать один из вариантов:

oCreate new Solution – создать новое решение;

oAdd to Solution – добавить в существующее решение, которое на данный момент открыто в среде разработки.

•Create directory for solution – если выбран этот пункт, то по указанному пути будет создана отдельная папка для решения, а в нее уже будет добавлена папка проекта;

•Solution name – позволяет указать явно имя решения. Этот пункт доступен, если вы выберите Create directory for solution.

Как мы уже знаем, проекты добавляются в решение. Щелкнув правой кнопкой мышки по имени проекта в окне Solution Explorer, мы можем увидеть большое контекстное меню с командами управления проектами. Давайте посмотрим, какие команды нам доступны в контекстном меню:

•Build – собрать проект. При этом будут компилироваться только измененные и новые файлы;

•Rebuild – пересобрать проект. При этом, будут компилироваться все файлы проекта;

•Clean – очистить проект;

•Publish – опубликовать проект;

•Add – добавить в проект. При наведении на этот пункт, перед нами появляется дополнительное контекстное меню:

oNew Item – добавить новый элемент. При выборе этого пункта, перед нами появится окно выбора нового типа файла;

oExisting Item – добавить в проект уже существующий у вас на диске файл. При выборе этого пункта, вы увидите стандартное окно открытия файла, с помощью которого нужно выбрать файл, который должен быть добавлен в проект;

oNew Folder – создать в проекте новую папку. Папки позволяют организовывать файлы в проекте по смыслу и по типу использования;

oWindows Form… — добавить в проект новую визуальную форму ;

oUser Control… — добавить в проект новый элемент управления;

oComponent – добавить в проект новый компонент;

oClass – добавить новый класс.

•Add Reference – добавить в проект ссылку на библиотеку;

•Add Web Reference – добавить Web ссылку;

•View Class Diagram – просмотреть диаграмму классов проекта в виде визуального представления;

•Set as SrartUp Project – назначить текущий проект как запускаемый при нажатии F5. Этот пункт удоен для быстрой смены запускаемого проекта по умолчанию, если у вас в решении находится несколько проектов;

•Debug – управлении отладкой проекта.

•Cut – вырезать проект в буфер обмена;

•Paste – вставить из буфера обмена;

•Remove – удалить проект из решения;

•Rename – переименовать проект;

•Unload project – выгрузить проект;

•Open Folder in Windows Explorer – открыть папку проекта в окне проводника;

•Properties – отобразить свойства проекта.

Наиболее часто используемыми пунктами в этом меню по моей практике являются пункт Add, Add Reference и Properties. Очень редко приходится работать с проектами, которые состоят только из одного файла, очень часто все же приходится что-то добавлять в проект. Это могут быть файлы ресурсов, компоненты или просто файлы классов. Поэтому я достаточно часто обращаюсь к подпунктам меню Add.

При работе с библиотеками кода, чтобы среда разработки узнала о существовании нужной вам библиотеки, нужно добавить к проекту ссылку на эту библиотеку. К большинству стандартных и часто используемых библиотек, ссылки уже наведены. Вы можете открыть в проекте папку References и здесь увидите список библиотек, которые уже добавлены в ваш проект. Если вы создаете проект для платформы .NET Framework 3.5, то в этом списке могут находиться так же ссылки, необходимые для работы с Linq.

Если нужной вам библиотеки нет, то ее можно добавить. Для этого можно сделать одно из двух:

•Щелкнуть правой кнопкой по имени проекта, которому нужно добавить новую ссылку, и из контекстного меню выбрать Add Reference…;

•Щелкнуть правой кнопкой по папке Reference и здесь так же появиться контекстное меню, в котором есть пункт Add Reference….

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

•.NET – содержит список .NET библиотек, установленных на данном компьютере, в глобальном кеше сборок;

•COM – здесь находятся библиотеки COM, установленные на компьютере;

•Projects – вы можете выбрать проект, ссылка к которому будет добавлена;

•Browse – позволяет найти библиотеку кода на диске компьютера и добавить явно файл. Этот метод удобен, когда нужно использовать локальную сборку;

•Recent – содержит список недавно использованных или добавляемых вами сборок.

Последний из важных пунктов управления проектами, который мы сейчас рассмотрим – это свойства проекта. Свойства проекта находятся под пунктом меню Properties. Выбрав это меню, вы не увидите классического Windows окна со свойствами, в Visual Studio 2008 окно свойств было переработано, и теперь появляется как закладка в основной области окна. Это очень удобно, потому что теперь вы можете держать окно со свойствами проекта постоянно открытыми. Изменяя свойства, можно тут же перекомпилировать проект и запустить его на выполнение, чтобы увидеть результат. Если результат оказался неудовлетворительным, то можно все вернуть на родину или попробовать другие сочетания свойств или параметров проекта.

На мой взгляд, новое окно свойств Visual Studio 2008 стало намного удобнее и интеллектуальнее. Все свойства разбиты по категориям и с ними удобно работать. В зависимости от типа открытого проекта, вам будут доступны те или иные возможности и закладки. Количество свойств может отличаться и от версии среды разработки. Например, Visual Studio Express Edition обладает небольшими возможностями по настройке проекта.

Наибольшее количество настроек, на мой взгляд, у проектов на C++ для Win32. Эти проекты накопили очень большое количество директив за все время существования платформы, и новое окно с его новыми возможностями управления тут просто спасение для большинства программистов, особенно начинающих.

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

•Application – основные настройки приложения;

•Build – параметры сборки проекта;

•Build Events – события сборки. На разные события вы можете повесить собственный код;

•Debug – параметры отладки;

•Resources – ресурсы проекта;

•Services – использование сервисов в вашем приложении;

•Settings – параметры проекта;

•Reference Paths – настройки путей;

•Signing – подписывание файла;

•Public – параметры публикации проекта.

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

Работа с формами

Попробуйте сейчас открыть в проекте окно Form1.cs. У вас должна быть такая форма в окне Soulution Explorer. Дважды щелкните по этому файлу, и он должен открыться в виде закладки в основной части окна среды разработки. Внутри окна будет видно визуальное представление формы.

Чтобы переключиться в режим редактирования кода формы, можно нажать F7 или щелкнуть правой кнопкой мыши по имени формы в окне Solution Explorer и из контекстного меню выбрать View Code.

Для того чтобы вернуться обратно в режим визуальной работы с формой, нужно нажать Shift+F7 или щелкнуть правой кнопкой мыши по имени формы в окне Solution Explorer и из контекстного меню выбрать View Designer.

Переключаться между представлениями можно и с помощью закладок, потому что графическое представление формы и код открываются в отдельных закладках в основной части окна среды разработки. Это связано не с удобством, а потому что графическое представление и код хранятся отдельно. Это раньше все было в одном файле, а в Visual Studio 2008 код отделен от представления, что очень удобно.

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

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

Слева от кода вы можете увидеть полосы и квадратики. Таким образом, редактор кода автоматически нашел код, который можно сворачивать или наоборот раскрывать. Щелкнув по квадратику напротив имени метода, вы можете свернуть код этого метода, чтобы он не занимал рабочее пространство. Вы можете сворачивать целые классы или регионы.

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

Панель инструментов

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

Цукерберг рекомендует:  Ajax; - подгрузка блоков на jsjqueryajax

Чтобы установить элемент управления на визуальную форму, можно взять мышкой и перетащить элемент управления на форму. Попробуйте сейчас открыть в проекте окно Form1.cs. Если у вас открыт проект по умолчанию, который мы создавали, и вы ничего в нем не меняли, то у вас должна быть такая форма в окне Soulution Explorer. Дважды щелкните по этому файлу, и он должен открыться в виде закладки в основной части окна среды разработки. Внутри окна будет видно визуальное представление формы. Теперь рассмотрим методы установки компонентов на форме:

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

2.Щелкните на имени компонента, который вы хотите установить в панели инструментов. В результате он будет выделен. Теперь щелкните на визуальной форме. В позиции щелчка на форме будет создан выделенный в панели инструментов компонент с параметрами по умолчанию.

3.Щелкните на имени компонента, который вы хотите установить в панели инструментов. В результате он будет выделен. Теперь на визуальной форме установить курсор в позицию, где вы предполагаете должен находиться левый верхний угол компонента. Нажмите кнопку мышки и растяните ее (удерживая левую кнопку) до того места, где по вашему мнению, должен находиться правый нижний угол компонента. В результате будет создан выбранный элемент управления с указанными размерами.

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

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

Hello, C# — Учим Шарп #2

Опубликовано shwan в 08.11.2020 08.11.2020

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

Перед началом данного урока рекомендую ознакомиться с предыдущим Преимущества и недостатки C# — Учим Шарп #1

Как работает компьютер

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

  • Записать значения в память
  • Прочитать значение из памяти
  • Выполнить операции сложения, умножения, отрицания

И именно так он на самом деле и работает – обрабатывает миллиарды единиц информации каждую секунду, чтобы ты мог погонять в дотку или порнушку посмотреть. Вот такая у компьютера незавидная участь, поэтому не обижай его, заботься о нем. Вот когда ты последний раз чистил его от пыли? А?

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

Что такое языки программирования

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

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

Изначально программистам приходилось реализовывать свои мысли на языках низкого уровня. Это означает, что эти языки наиболее понятны компьютерам, но намного хуже воспринимаются людьми. Сейчас мы живем в эпоху языков высокого уровня, которые намного больше похожи на обычный текст и легко могут быть поняты даже человеком вообще ничего не понимающим в программировании (если, конечно, код написан не через жопу).

Инструмент создания приложений IDE

Таким образом, мы пришли к тому, что необходимы определенные инструменты, которые позволяют преобразовывать написанный текст на языке высокого уровня в машинные коды, которые будут понятны компьютеру. Такие приложения называются компиляторами. Но сейчас намного большей популярностью пользуются другие приложения, которые по сути являются основным инструментом современного программиста – это интегрированная среда разработки (Integrated Development Environment) IDE. По сути, это компилятор на стероидах. Это приложение, а иногда и набор инструментов, которые позволяют преобразовать исходный код, написанный программистом в готовое приложение, но содержащее в себе еще вагон и маленькую тележку дополнительных приблуд, которые делают жизнь программиста чуточку проще. Это и всевозможные статические анализаторы кода, которые находят ошибки еще до запуска приложения, а также указывают на так называемый код с душком. Это и системы тестирования, анализа и статистики по коду, инструменты для быстрого рефакторинга и выгрузки документации по коду. Короче, целая куча крутых фишек, которыми никто не пользуется.

Visual Studio

Так вот, основным инструментом C# программиста является интегрированная среда разработки Visual Studio 2020 на данный момент. Скачать ее можно по ссылке https://visualstudio.microsoft.com/ru/ Существует 3 основные версии

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

— Visual Studio Community может использовать неограниченное число пользователей в учебных аудиториях, для научных исследований или участия в проектах с открытым кодом.

— Для всех прочих сценариев использования: в некорпоративных организациях Visual Studio Community может использовать до 5 пользователей. В корпоративных организациях (в которых используется > 250 ПК или годовой доход которых > 1 млн долларов США) использование запрещено.

Таким образом, пока ты зарабатываешь меньше 1 млн долларов в год, ив твоей команде меньше 5 человек, можешь разрабатывать любое ПО в том числе и коммерческое.

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

Так как разработка на C# подразумевает универсальные приложения под любые платформы, то предоставляется over9000 компонентов, которые в большинстве своем совершенно тебе не нужны на данном этапе. Сейчас я покажу тебе необходимый минимум, а также мою рекомендуемую коллекцию компонентов.

  • Разработка классических приложений .NET — обязательно
  • ASP.NET и разработка веб-приложений
  • Кроссплатформенная разработка .NET Core

Самые нужные расширения для Visual Studio

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

Для этого открываем меню Средства => Расширения и обновления

Выбрать В сети и в строке поиска ввести названия необходимых расширений

ReSharper – суперкрутой статический анализатор кода. Может практически все, но некоторым (в том числе мне) не нравится, потому что бесит, и является платным. Но в целом очень полезен.

Web Essentials – mast have для веб программистов. Позволяет весьма упростить и ускорить процесс работы в интерфейсной частью приложения, упрощает и ускоряет верстку, но в других случаях он не нужен.

Productivity Power Tools 2020/2020 – целый набор небольших расширения, позволяющих сделать процесс написания кода комфортнее, код чище и красивее. Настоятельно рекомендую устанавливать каждому.

GitHub Extension for Visual Studio – очень удобное взаимодействие с популярным сервисом хранения кода и системой контроля версий. Каждому программисту нужно научиться и постоянно использовать любую подходящую систему контроля версий. А это расширение позволит форкать проекты и выполнять коммиты в пару кликов.

Visual Studio Spell Checker — позволяет избавиться от таких досадных ошибок, как опечатки в коде. Работает примерно как в ворде — подчеркивает красным не правильные слова. При этом он понимает различные нотации и без проблем понимает, что написанные слитно слова, но с заглавными буквами это не ошибка.

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

Создадим Hello World проект на C#

Открываем среду разработки Visual Studio и заходим в меню Файл => Создать => Проект

После этого выбираем Visual C# => Классическое приложение для Windows => Консольное приложение (.NET Framework), вводим имя проекта, указываем его расположение на диске и нажмем ОК.

В открывшимся окне вводим следующий код приложения

После чего запускаем приложение, нажав сочетание клавишь Ctrl+F5 или зеленую клавишу Пуск и получаем следующий результат

Поздравляю, вы создали свое первое приложение!

Подробно, весь процесс установки и настройки Visual Studio, а также создание первого приложения рассмотрен на моем видеоуроке.

Язык c# — Проблемы с Visual Studio

В этой статье опубликованы ответы на часто появляющиеся вопросы при программировании в среде C# от Microsoft.

См. также: преобразование даты, времени в строку Q014, преобразование чисел в строку Q015, преобразование строк в числа Q022.

В среде Visual Studio C# удобно делать пакет установки, не нужно разбираться с инсталляторами программы (внешние дополнительные инсталляторы теперь не нужны), которую Вы пишете. Для этого в меню достаточно выбрать в меню Построение (Build) -> Опубликовать (Release). Это так называемая технология ClickOnce [8]. В папке Release сразу появится подпапка app.publish, в которой будет лежать готовый инсталлятор setup.exe, содержащий все необходимые для установки программы компоненты.

Также см. вопрос Q073.

Почему такая проблема возникает: ListBox создается в основном потоке (thread), запускающей GUI окна программы. Другие потоки могут быть созданы для поддержки обмена данными с внешними устройствами (сеть Ethernet, COM-порт, USB и т. п.). Эти другие потоки могут обрабатывать события приема данных асинхронно с выполнением основного потока. Поэтому если эти потоки попытаются что-то записать в ListBox, то это может привести к конфликту с записью в ListBox данных из основного потока GUI интерфейса программы.

Как проблему можно решить: для ListBox создаются подпрограммы (методы), через которые выводятся данные в ListBox. Данные выводятся в ListBox только через эти подпрограммы, больше никак. Эти подпрограммы делаются защищенными (thread-safe) для вызова из любых потоков через delegate, InvokeRequired, Invoke.

См. также:
— справку в MSDN: Control.InvokeRequired — свойство, Control.Invoke — метод (Delegate), How to: Make Thread-Safe Calls to Windows Forms Controls
— Making Windows Forms thread safe

В C# уже нельзя, как раньше, беспечно задавать константы операторами #define, и добавлять их h-файлы (как было принято в языках C и C++). Для C# нельзя использовать заголовки (файлы с расширением *.h или *.hpp), и директива #define не может использоваться для задания констант.

Для использования #define теперь такие правила:

1. Добавлять определения констант #define можно только в начале файла, иначе получите ошибку CS1032.
2. Директива define может использоваться только для задания ключей компиляции, но не для задания констант, иначе получите ошибку CS1025: Требуется однострочный комментарий или признак конца строки.

[Правила определения констант]

Константы в C# задаются как обычные переменные, только с помощью ключевого слова const:

Однако если Вы попытаетесь сделать это вне пространства имен класса, то получите ошибку CS0116: Пространство имен не может непосредственно содержать такие члены, как поля или методы. Константы нужно определять не только внутри скобок одной из секций namespace, но и в каком-то определенном классе. Например так (определение константы USBCAN_SUCCESSFUL):

Вместо #define удобно также использовать перечисления (enum). Вот пример задания масок для бит сигналов:

[Как определять глобальные константы]

Чтобы определить константы, которые видны в любом классе пространства имен приложения, нужно создать отдельный класс. Этот класс с константами обязательно должен быть размещен после кода класса формы, иначе конструктор формы не запустится — несмотря на то, что приложение компилируется без ошибок. Если попытаться запустить такое скомпилированное приложение, то возникнет ошибка MissingManifestResourceException (см. вопрос Q019).

Пример правильного определения глобальных констант в файле Form1.cs с помощью глобального статического класса CNST :

Теперь можно пользоваться константами в любом месте пространства имен namespace MyApp через префикс класса CNST:

И еще добавьте обработчик события приема сообщения CANsrv_CanMsgReceivedEvent:

Для упрощенного добавления обработчика выполните следующие шаги:

— в коде Form1_Load напечатайте CANsrv. (в конце поставьте точку);
— нажмите Ctrl+Space, из появившегося списка методов и событий выберите CanMsgReceivedEvent;
— допечатайте пробел, + и =. Появится подсказка в виде текста:
«new USBcanServer.CanMsgReceivedEventEventHandler(CANsrv_CanMsgReceivedEvent); (Нажмите клавишу TAB для вставки)»
— нажмите клавишу TAB, и в коде автоматически будет создана строка:

После этого останется вручную создать процедуру CANsrv_CanMsgReceivedEvent. Полный код см. в [2].

На C# будет так (только для компиляции в небезопасном режиме, с опцией /unsafe):

Если код компилируется в безопасном режиме, то на C# структура tCanMsgStruct должна быть определена так:

Экземпляр структуры определяется так:

Если не нужно точное соответствие положения полей в памяти, то структуры можно определять обычным способом, через ключевое слово struct. Такие структуры на C# почти что классы, и могут иметь даже собственные конструкторы, в которых можно инициализировать массивы, входящие в структуру как поле. Как и классы, в составе полей такие структуры могут иметь классы, атрибуты и методы. Пример структуры с конструктором:

Если компилируется небезопасный код (применяется опция /unsafe), то можно определять массивы так:

[Многомерные массивы]

Определение массива 2×8 байт:

public byte [,] buf = new byte [2, 8];

Форматированный вывод в строку (то, что на C++ делает printf с параметрами форматирования %) в C# можно делать через метод Format, который есть у класса string. Тип форматирования зависит не только от строки формата, но и от типа выводимых параметров.

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

[Целые десятичные числа]

[Целые числа в HEX-формат]

[Числа с плавающей точкой]

[Вывод строки]

См. также: преобразование даты, времени в строку Q014, преобразование строк в числа Q022.

По умолчанию Windows на русском языке число с плавающей точкой выводит в формат с использованием запятой:

Но как быть, если вместо запятой нужно выводить точку?

На языке C# значение ключевого слова static поменялось. Это слово можно использовать только для глобальных переменных класса, и оно будет означать следующее — переменная класса, которая объявлена с ключевым словом static, будет иметь общее значение между всеми экземплярами этого класса. Т. е. она будет «глобальной» для всех экземпляров этого класса.

Подробнее про значение ключевого слова static на C# см. статью [7].

Меню Проект -> Добавить форму Windows. -> Форма Windows Forms -> OK. По умолчанию будет добавлена форма Form2. Далее в модуле Program.cs добавьте код для отображения второй формы:

После запуска программы отобразятся сразу две формы, Form1 и Form2. Подробности см. в [4].

Проблема возникла после попытки добавить глобальный класс констант в пространство имен приложения (в данном примере calibr) перед классом определения формы. Так неправильно, при запуске приложения будет происходить ошибка MissingManifestResourceException, и конструктор формы не будет работать:

Решение проблемы: нужно перенести класс констант за определение класса формы. Вот так правильно:

Пример использования функции с переменным числом параметров (запись в лог):

Ответ: изменять свойство Location нужно через вспомогательную переменную следующим образом:

Похожим образом нужно менять и размер окна формы, так как прямым присвоением Form.Size.Width и Form.Size.Height этого сделать нельзя (появится ошибка CS1612). Менять размер формы нужно так:

См. методы класса Convert — ToBoolean, ToByte, ToChar, ToDecimal, ToDouble, ToInt16, ToInt32, ToInt64, ToUInt16, ToUInt32, ToUInt64 и другие.

[Простой случай преобразования в целое число со знаком]

[Преобразование строки символов в HEX-формате]

• Преобразование даты, времени в строку Q014.
• Преобразование чисел в строку Q015.

Чтобы при запуске программы в ComboBox отображалось нужное значение из списка Items, программно поменяйте свойство SelectedIndex.

Подробности по ComboBox см. в [3].

то попробуйте исправить определение класса MyClass, добавив public:

Модификатор static можно использовать с классами, полями, методами, свойствами, операторами, событиями и конструкторами, но нельзя — с индексаторами, деструкторами или типами, отличными от классов. На статический член нельзя ссылаться через экземпляр, а можно только через имя типа. Подробности смотрите в MSDN, раздел «static (Справочник по C#)».

А вот так нужно исправить код, чтобы не возникала ошибка System.StackOverflowException в System.Windows.Forms.dll:

Второй способ зафиксировать размер формы во время выполнения — задайте обработчик события OnResize, в котором установите свойства Width и Height в нужное значение.

Этим же способом можно узнать и высоту текста в пикселах (для нашего примера это будет stringSize.Height).

Используйте метод ShowDialog(), подробности см. в [4].

См. также вопрос «Как запустить внешнее приложение?».

Однако можно создать экземпляр класса (компонент) во время выполнения программы, что решит проблему. На примере таймера Timer с Панели Элементов, который добавляется программно в невизуальный класс MyClass:

Методы

Пояснения Имя исполняемого файла в форме myApp.vhost.exe Каталог, где находится исполняемый файл (полный путь каталога). Получим строку типа «myApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null» Полный путь до исполняемого файла в виде c:\VisualStudioProjects\myApp\bin\Debug\myApp.exe

Получение имени исполняемого файла без пути и расширения, получим что-то типа строки «myApp».

Ошибка 17 Не удалось опубликовать из-за того, что не удалось построить проект. 1
Ошибка 18 При подписи произошла ошибка: Не удалось подписать bin\Release\app.publish\\setup.exe. SignTool Error: The signer’s certificate is not valid for signing.
SignTool Error: An error occurred while attempting to sign: bin\Release\app.publish\\setup.exe C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets 3987

Решение проблемы: зайдите в меню Проект -> Свойства проекта, снимите галочку «Подписать манифесты ClickOnce». После запуска публикации система выдаст запрос: «Приложение подписано не тем ключом, что существующее на сервере приложение. Перезаписать его?», ответьте утвердительно.

К сожалению, C# не поддерживает объединения C/C++. Однако с той же целью можно использовать StructLayout(LayoutKind.Explicit) и атрибуты FieldOffset. Предположим, что у Вас есть структура из 64 бит данных, и Вам нужно представить её либо как 8 байт (byte), либо как два целых 32-разрядных числа (int). Атрибут FieldOffset регулирует смещение нужных нам частей данных. Например:

[Пример1: проблема с ulong и int]

При попытке задать в перечислении 64-битную величину получаю ошибку CS0266 «Не удается неявно преобразовать тип «ulong» в «int». Существует явное преобразование (возможно, пропущено приведение типов) C:\csharpprj\protocol.cs . «.

Решение проблемы: по умолчанию перечисление (enum) на C# подразумевает использование целых чисел (int). Чтобы исправить ошибку, добавьте явное указание типа для перечисления (можно указать типы byte, sbyte, short, ushort, int, uint, long или ulong):

[Пример2: проблема с типом byte]

Вот такой простой код неожиданно дает ошибку CS0266:

Проблема тут в том, что оператор + в дает в результате тип int. Решение проблемы:

В С++ он вызывается напрямую механизмами языка. Это происходит так же быстро, как и вызов метода из кода пользователя (ну, пожалуй, совсем ненамного дольше).

В С# деструкторы вызываются не пользовательским кодом, а средой CLR. Код C# потому и называется управляемым, что по сути он запускается под управлением среды. Поэтому, к примеру, здесь нет указателей — среда сама выполняет операции с указателями автоматически и не поддерживает код, который их использует. Механизм использования указателей все же оставлен в целях совместимости, но при этом классы, их использующие, надо помечать ключевым словом unsafe, разрешать выполнение этого unsafe кода в свойствах проекта. Но самое главное — среда не будет управлять этим кодом — она передаст ему управление и будет дожидаться, когда получит его обратно.

То же самое относится и к деструкторам. Деструкторы призваны освободить ресурсы, занимаемые классом. Но класс не может освободить ресурсы, которыми фактически не владеет. А по факту владеет он только теми кусками, которыми управляет сам. Поэтому деструктор вызывается не пользовательским кодом, а из CLR, то есть снаружи. Но не сразу, а только после того, как среда отметит, что на экземпляр класса больше не ссылается ни одной переменной. Отсюда возникает задержка — только после второго прохода сборщика мусора. И отсюда потеря производительности — мы заставляем сборщик мусора отслеживать еще и деструкторы.

Моя практика показала, что при уничтожении около полусотни объектов с деструкторами (причем до крайности простыми — из статической переменной вычиталась единица) комп «подвисает» так, что это становится заметно пользователю. Замеры показали диапазоны 18 .. 47 мс, т. е. почти всегда «терялся» один кадр на экране, а в некоторых случаях — до двух/трех (при частоте смены кадров в 30 Гц).

Если при попытке компиляции выводится ошибка о том, что System.Windows.Forms не найдено в пространстве имен (‘Forms’ does not exist in the namespace system.windows), то добавьте на него ссылку в проекте. Для этого сделайте правый клик на дерево файлов проекта (Solution Tree), выберите в контекстном меню Добавить ссылку. в появившемся окне «Добавить ссылку» перейдите на закладку .NET, прокрутите список и выберите в нем System.Windows.Forms, нажмите OK.

Еще один пример подпрограммы вывода модального диалогового окна с выходом из приложения, если установлен в true параметр exit:

Как исправить: зайдите в свойства проекта (Project -> Properties. ), перейдите в раздел Подписывание (Signing), нажмите кнопку «Создать тестовый сертификат. » (create test certificate). Появится окно запроса пароля сертификата. Оставьте поля пустыми и нажмите OK, после чего опубликуйте проект.

1. Откройте Панель элементов, выберите PictureBox, бросьте на форму.
2. Выберите свойства pictureBox1 -> BackgroundImage, нажмите справа кнопку с многоточием, откроется окно выбора ресурса. Выберите уже имеющийся ресурс, или нажмите внизу кнопку Импорт. и выберите нужную картинку (формата BMP или PNG).
3. По умолчанию свойство BackgroungImageLayout установлено в Tile, что означает, что картинка будет размножена мозаикой по всей площади pictureBox1 (границы этой площади можно раздвинуть мышкой). Чтобы картинка была только одна, выберите значение None для свойства BackgroungImageLayout. Также свойство SizeMode установите в AutoSize, если хотите, чтобы размеры pictureBox1 автоматически подстраивались под размер картинки.
4. Чтобы поменять картинку runtime (во время выполнения программы), нужно присвоить свойство BackgroundImage, пример:

Цукерберг рекомендует:  Jar - Java. Как собрать EXE файл из нескольких JAR

Здесь door_closed и door_disabled — ссылки на импортированные картинки door_closed.png и door_open.png.

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

Как нарисовать черную линию:

Пример рисования не заштрихованных эллипса и прямоугольника:

В VB такая операция происходит присвоением object=nothing, на C++ применяется оператор delete. Как явно удалять объекты на C#?

В C# можно сделать аналогичное действие object=null, но в действительности присвоение object=null не удаляет объект, а просто делает недействительной ссылку на него. В .NET это дает сигнал сборщику мусора (garbage collector) удалить объект из памяти. Но Вы не можете знать, когда конкретно это произойдет.

В C# при создании объекта оператором new память для него выделяется из кучи (heap). Вы также можете Объект удалится автоматически тем же сборщиком мусора, когда управление выйдет за пределы существование объекта (например, когда завершается функция, которая создала объект оператором new). Но опять-таки неизвестно, в какой момент произойдет освобождение памяти, связанное с удалением объекта.

Если в C# у объекта есть метод Dispose(), то его нужно обязательно вызвать до того, как управление выйдет из сферы действия объекта. Вы можете использовать ключевое слово using, чтобы сделать эту операцию автоматически, например:

Принудительно запустить процедуру сбора мусора можно вызовом GC.Collect(), но это делать не рекомендуется.

Для произвольного класса:

Для метки WinForm:

Если у Вас есть экземпляр x класса A внутри namespace B, то можете использовать:

В строке s не будет содержаться «B». Вы можете также использовать x.GetType().Name, чтобы получить имя типа, или x.GetType().FullName чтобы получить полное имя, вместе с B.

Другой вариант, поместите в Вашу сборку функцию:

Если хотите, чтобы эта функция находилась в библиотеке, которая используется Вашей программой, то определите функцию так:

[Вариант 1]

Чтобы в Windows Forms нарисовать метку с вертикальным текстом, нужно переопределить событие Paint, и рисовать в нем метку вертикально. Имейте в виду, что GDI оптимизировано для горизонтального рисования меток. Если Вы повернете текст (даже если угол поворота будет кратен 90 градусов), то возможно это будет работать не очень качественно.

Возможно лучшим решением будет нарисовать текст (или поручить метке нарисовать себя) в растровую картинку (bitmap), и затем отобразить эту картинку повернутой.

Ниже приведен код, который рисует Custom Control с вертикальным текстом. Имейте в виду, что текст ClearType не работает, если текст не горизонтальный.

Можно повернуть текст в событии OnPaint, или в методе Paint:

[Вариант 2]

Создайте свой класс myLabel, который может поворачивать текст. Этот класс можно будет перетаскивать в форму приложения прямо из панели компонентов ToolBox.

Для этого класса можно установить свойства:

Улучшенная реализация, поддерживающая автоматическое изменение размеров виджета:

Отличный, рабочий пример есть в MSDN (ключевая строка для поиска ICustomFormatter.Format Method site:msdn.microsoft.com ).

См. также: преобразование даты, времени в строку Q014, преобразование чисел в строку Q015, преобразование строк в числа Q022.

‘Необработанное исключение типа «System.BadImageFormatException» произошло в имя_приложения.exe

Дополнительные сведения: Была сделана попытка загрузить программу, имеющую неверный формат. (Исключение из HRESULT: 0xXXXXXXXX)’

Чаще всего проблема из-за того, что вызов функции (метода) потребовал вызова DLL, скомпилированной под другую систему. Например, программа работает на 64-битной версии Windows, а DLL сделана для 32-битной версии. Что можно сделать:

1. Найти DLL, которая скомпилирована под Вашу операционную систему.

2. Если у Вас 64-битная система, а загружаемая DLL 32-битная, то можно изменить в свойствах тип конечной платформы на 32-битную. Для этого откройте свойства проекта, перейдите в раздел Построение, и выберите в выпадающем списке «Конечная платформа:» вариант x86 (см. скриншот ниже). После этого пересоберите проект.

Для этого достаточно поменять свойство формы Text. Пример:

[Текст модуля myform.cs]

Можно также к свойству Text обращаться через объект this:

Для этого создайте событие FormClosing, и в его обработчике присвойте FormClosingEventArgs.Cancel значение true. Пример:

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

Можно ли в C# декларировать переменную таким образом, чтобы в каждом классе (представленном модулем *.cs) можно было получить доступ к содержимому этой переменной без необходимости создавать экземпляр какого-либо класса? Другими словами, если ли в C# глобальные переменные, не привязанные к какому-либо экземпляру класса? Есть ли какая-то альтернатива обмениваться данными между классами через одну внешнюю переменную?

В C# не существует такого понятия, как глобальная переменная, и точка. Однако есть некий аналог в виде модификатора public static , который можно применять к классам и к отдельным членам класса. Короче говоря, используйте класс типа public static, и получайте доступ к нему где угодно и откуда угодно.

Можно использовать переменные этого класса в любом месте, когда они находятся в одном и том же пространстве имен (namespace), что и ссылающийся на переменные код. Можно объявить MyStaticValues или Globals без пространства имен (что поместит эти статические классы в глобальное пространство имен приложения, application namespace), или Вы работаете с разными пространствами имен, то можете указать нужное пространство следующей директивой:

[Как использовать аналоги глобальных переменных в C#]

Сначала хорошенько подумайте — действительно ли Вам нужна глобальная переменная. Скорее всего решение должно быть принято, исходя из рассмотрения техзадания на разрабатываемое программное обеспечение. Обычно статические переменные могут пригодиться для таких объектов в программе, которые имеются исключительно в одном экземпляре, их не нужно создавать и удалять динамически, и если эти объекты подразумеваются для использования несколькими разными классами в программе. Имейте в виду, что иногда проблемы, возникающие из-за конкуренции доступа к глобальным переменным (особенно актуально в сложных системах), бывает трудно отладить, поэтому будьте готовы к трудностям.

Итак, если положительное решение принято и глобальные переменные все-таки нужны, то действуйте примерно по такой схеме:

1. Поместите все глобальные переменные в один static класс (для удобства управляемости кодом).
2. Используйте внутри этого класса обертки get/set для доступа к «глобальным» переменным. Это предоставит дополнительный механизм для отладки проблем, возникающих из-за конкурентного доступа.

Вот базовый пример для такого класса:

Использование переменных этого класса из других классов (находящихся в том же пространстве имен namespace) может быть таким:

Хорошая информация по теме static классов C# есть в статье «Статика в C#», опубликованной на Хабрахабр (ключевые слова для поиска Статика в C# site:habrahabr.ru).

Пример определения дочернего класса TMyClass внутри родительского класса myform:

После этого можно обращаться к экземплярам классов TMyClass по индексу (вызывать его методы, обращаться к свойствам). Если не сделать инициализацию элементов массива, то при запуске программы и попытке доступа к экземплярам классов из массива получите ошибку «ссылка на объект не указывает на экземпляр объекта».

У меня была следующая проблема: KeyDown срабатывает нормально, пока не добавлена на форму кнопка. Как только кнопка добавлена, KeyDown перестает работать.

[Решение 1]

Нужно установить у формы свойство KeyPreview=true. Этот совет можно найти на большинстве форумов, однако он помогает не всегда — возможно, это зависит от версии библиотек Visual Studio C#. Мне не помогло (Microsoft Visual Studio 2010 Версия 10.0.40219.1 SP1Rel).

[Решение 2]

Нужно переопределить метод ProcessCmdKey формы. Для этого просто добавьте в класс формы следующий код:

Обратите внимание, что при возврате true из метода ProcessCmdKey не будет отправлено событие нажатия на элемент управления, на котором установлен фокус.

Окно имеет высоту (свойство Height ) и ширину (свойство Width ), которые определяют размеры окна формы. Эти свойства можно читать или менять программно. Однако есть еще и «клиентская» область формы, которая меньше. По ширине она меньше на ширину бордюров окна, а по высоте она меньше еще и на размер верхней плашки (title bar).

[Свойство ClientSize]

У свойства ClientSize формы есть поля только для чтения — Width и Height, по значению которых можно определить размеры клиентской области формы (ширину и высоту соответственно).

[Метод SetClientSizeCore]

Метод SetClientSizeCore принимает 2 параметра — x и y, и позволяет установить размеры клиентской области формы.

Пример, в котором возникает ошибка (Невозможно получить доступ к нестатическому члену внешнего типа . ):

[Варианты решения проблемы]

1. Можно применить к переменной или методу, к которому нельзя получить доступ, атрибут static:

2. Вместо вложенных классов (nesting) применить наследование (inheritance). Родительский класс должен иметь тип доступа public, чтобы можно было применить наследование:

3. Создать экземпляр класса, который содержит нужную переменную или метод:

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

[Решение проблемы]

Свойство Text класс StatusStrip получает при наследовании из класса ToolStrip (который в свою очередь наследует его из класса Control). Но у свойства Text класса ToolStrip нет визуального эффекта, просто так почему-то спроектирован класс ToolStrip. Поэтому присваивать значение свойству Text класса StatusStrip бесполезно. Поначалу это может запутать.

Для того, чтобы на самом деле вывести текст в строку статуса StatusStrip, необходимо добавить к StatusStrip элемент StatusLabel. В дизайнере формы это делается следующим образом, см. скриншот:

По умолчанию будет создан элемент класса toolStripStatusLabel1, доступный напрямую из кода формы. Для отображения текста нужно менять его свойство Text, при этом метод Refresh для StatusStrip вызывать не обязательно. Пример:

Решение взято отсюда: Reading/writing an INI file site:stackoverflow.com.

Создайте класс IniFile.cs и добавьте его в проект:

[Открытие ini-файла]

Открыть ini-файл можно тремя способами:

В результате Вы получите объект IniFile, после чего можете воспользоваться его методами Read , Write , KeyExists , DeleteKey , DeleteSection .

[Запись парамеров в ini-файл]

Предположим, нам нужно получить INI-файл такого вида:

Для этого можно использовать следующий код:

Если не указывать секцию (последний параметр), то будет автоматически создана секция INI-файла с именем namespace приложения (в данном примере namespace MyApp).

[Чтение параметров из ini-файла]

Пример чтения параметра MyPath из секции SECTION:

Если не указывать имя секции (последний параметр), то в качестве имени секции будет использоваться имя namespace приложения (в данном примере namespace MyApp).

[Проверка существования параметра]

Если параметр MyPath не существует в секции SECTION, то он будет создан и записан:

[Удаление параметра]

[Удаление секции]

Пусть у нас есть вот такой файл, таблица частот (test.xml):

Ниже показан пример загрузки этого файла в таблицу dataGr >using System.Xml .

Важное замечание: у метода Load (filename) объекта XmlDocument есть особенность поведения под Windows XP, если в качестве filename передавать не полный, а относительный путь. По крайней мере этот глюк у меня наблюдался на Visual Studio 2010 (.NET Framework версии 4.6.01590 SP1Rel), возможно в последующих версиях это исправлено. Проблема заключается в следующем: в Windows XP первая передача в Load относительного имени файла происходит успешно, но этот каталог запоминается. Все последующие вызовы Load с передачей относительного имени заканчиваются неудачей, потому что к файл ищется по пути, полученному сложением текущего каталога с переданным относительным путем. Под Windows 7 такой проблемы нет, относительные пути всегда отрабатывают без проблем.

Для обхода этой ошибки приходится в метод Load передавать полное имя файла, тогда все нормально работает и под Windows XP, и под Windows 7:

ToolStripComboBox это выпадающий список выбора, который можно встроить как элемент меню.

[Как динамически добавлять элементы списка]

[Как запретить редактирование элементов списка]

[Текущий элемент списка]

Текущий элемент списка ToolStripComboBox доступен на чтение и запись через свойство SelectedIndex. Нумерация элементов начинается с нуля.

Как проверять выбранный пользователем элемент списка:

Как устанавливать текущий элемент программно:

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

2. Измените свойство файла «Действие при построении» в значение «Содержание» (по умолчанию там указано «Нет»).

3. Откройте свойства проекта, зайдите в раздел «Публикация». Кликните на кнопку «Файлы приложения. «. Убедитесь, что нужный файл был добавлен в список таблицы публикуемых файлов. В строке таблицы этого файла должны быть установлены следующие значения:

Состояние публикации: Включить (Авто)
Группа загрузки: (Требуется)
Хеш: Включить

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

После попытки запуска инсталлятора (setup.exe) приложение не устанавливается, в логе установки выводится сообщение:

1. Удалите папку 2.0, которая находится в профиле пользователя. На Windows 7 и Windows Vista эта папка находится в каталоге C:\Users\имя_пользователя\AppData\Local\Apps\. На Windows XP эта папка находится в каталоге c:\Documents & Settings\имя_пользователя\LocalSettings\Apps\. При удалении папки могут потребоваться права администратора. Если удалить папку не получается, то перезагрузите компьютер, закройте все приложения и с правами администратора повторите попытку удаления папки 2.0.

2. Если после удаления папки 2.0 проблема не исчезла, то запустите с правами администратора команду:

На примере библиотек .NET Ivi.Visa и NationalInstruments.Visa:

«Не удалось найти имя типа или пространства имен «Ivi» (пропущена директива using или ссылка на сборку?)»
«Не удалось найти имя типа или пространства имен «NationalInstruments» (пропущена директива using или ссылка на сборку?)»

Разверните в Обозревателе решений папки проекта, выполните правый клик на папке «Ссылки», выберите «Добавить ссылку. «. Откроется окно диалога выбора библиотек. На закладке .NET найдите нужные библиотеки (в нашем примере это Ivi.Visa Assembly и National Instruments VISA, можно выбирать несколько библиотек сразу, удерживая клавишу Ctrl) и кликните OK.

В папке «Ссылки» появятся новые библиотеки, и ошибка «Не удалось найти . » исчезнет.

Откройте свойства проекта, перейдите в раздел Отладка -> Параметры запуска -> в окне «Аргументы командной строки:» укажите нужные аргументы.

Необходимо было в момент запуска программы заполнить выпадающий список ComboBox нужными значениями (имена COM-портов) и потом выбрать из этого списка нужный, чтобы он по умолчанию отображался после полной загрузки программы. Все это я делал в обработчике события загрузки формы Form1_Load. Однако в при попытке присвоить значение свойству SelectedIndex срабатывало исключение типа «System.NullReferenceException»: Ссылка на объект не указывает на экземпляр объекта (Object reference not set to an instance of an object).

Причина ошибки в том, что в момент загрузки формы визуальные элементы еще не полностью инициализированы. Решение проблемы: устанавливать SelectedIndex с помощью вызова события SelectedIndexChanged:

В состав Visual Studio 2010 входит простой, но иногда довольно неудобный способ для создания дистрибутива (публикации) приложения C#. Это так называемый инструментарий ClickOnce (доступен из меню Построение -> Опубликовать). Такой способ создания дистрибутива всем хорош, но его основное неудобство заключается в том, что невозможно никаким способом задать место установки приложения на компьютере пользователя. Приложение установится автоматически в папку, находящуюся в пределах профиля пользователя (так называемый кэш приложения, Application Cache). Путь до каталога установки приложения получается очень длинным и сложным, на Windows 7 и Windows 10 это будет что-то наподобие C:\ Users\ имя_пользователя\ AppData\ Local\ Apps\ 2.0\ 9HOERDLL.1LY\ KOHZZR9V.QHE\ cali..tion_e314c8db98ca16b5_0001.0000_1b1f3d3fa0feae4c\, или на старых компьютерах с Windows XP это папка c:\ Document and Settings\ имя_пользователя\..

Причина такого решения в том, что решаются многие проблемы безопасности — для установки и работы приложения не требуется наличие прав администратора. Т. е. пользователь с пониженными правами сам может установить, удалить или обновить приложение, вмешательство администратора не требуется. Пользователь с пониженными правами и приложения, работающие от его имени (в том числе трояны и вирусы), никак не могут нарушить содержимое таких системных папок, как %SystemRoot%, %ProgramFiles%, %ProgramFiles(x86)%, %ProgramData% и т. п.

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

Недостатки ClickOnce следующие:

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

Таким образом, если Вас не устраивает установка ClickOnce, то нет никакого другого выхода, как инсталляция путем ручного копирования скомпилированного приложения в нужную папку, или создание дистрибутива другим способом, например через создание пакета *.msi (Microsoft Windows Installer).

Visual Studio Code для начинающих

Visual Studio Code — редактор кода, который поддерживает работу с более чем 30 языками программирования и форматами файлов, включая C#, TypeScript, JavaScript. Не просто редактор кода, а полезный инструмент разработчика, обладающий дополнительными возможностями.

VS Code можно использовать на компьютерах под управлением Windows, OS X и Linux. Инструмент вышел весной 2015 года, и постоянно обновлялся. За время существования Visual Studio Code расширил свой функционал, список поддерживаемых языков, основываясь на отзывах и пожеланиях пользователей.

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

Подготовленные видеоматериалы содержат различные аспекты работы с Visual Studio Code, включая работу сценарии работы с различными языками программирования, интеграцию с Git, Visual Studio Online и Unity3D, отладку приложений и многое другое.

Visual Studio Code простая установка и настройка инструмента

Visual Studio Code с этого года является продуктом с открытым исходным кодом, а также имеет собственную галерею и новую модель расширений. Найти и загрузить редактор можно на сайте.

Как работать с новым редактором кода

В зависимости от расширения файлов Visual Studio Code определяет, какой язык программирования используется и подсвечивает разметку для более чем 30-ти поддерживаемых языков. Полный список поддерживаемых языков вы можете посмотреть здесь.

Быстрая разработка с Codesnippets

Visual Studio Code позволяет вставлять заранее заготовленные блоки кода. Эта возможность способна значительно облегчить разработку и упростить задачу переиспользования кода.

Продолжите работу с GIT в Visual Studio Code

Если вы привыкли работать с Git, то попробуйте воспользоваться им вместе с Visual Studio Code.

Используйте VisualStudioOnline для управления исходным кодом

В предыдущем видео мы обсудили, как установить Git и использовать его с локальным хранилищем. Для полноценного использования Git воспользуйтесь популярными провайдерами — GitHub и Visual Studio Online.

Интегрируйте Visual Studio Code с GitHub

Если вам необходимо опубликовать проект с открытым исходным кодом — воспользуйте GitHub, но если код должен быть закрыт от внешнего мира, то необходимо будет приобрести подписку или воспользоваться Visual Studio Online.

Инструмент для работы с Unity проектами на Mac

Используйте Unity plugin, для интеграции Visual Studio Code и Unity.

Внешние компиляторы, средства отладки и тестирования

Следующая важная возможность в Code — это задачи. Благодаря задачам вы можете выполнить любую команду командной строки в контексте Visual Studio Code и просмотреть результаты работы прямо из среды разработки. Таким образом, вы можете использовать внешние компиляторы, отладчики, средства тестирования и многое другое.

Встроенный отладчик для Node.jsи Monoпроектов

Visual Studio Code поддерживает отладку для Node.js проектов и для проектов на Mono. Поскольку Unity использует Mono, то мы можем так же использовать отладчик для подобных проектов без каких-либо проблем.

Опубликуйте сайт в Azure с вашего Mac

Используя Visual Studio Community, доступную для установки на Windows, вы без лишних усилий смогли бы выполнить развертывание приложений, настройку пакетов и создавать отдельные службы. Несмотря на то, что редактор Visual Studio Code лишен этих возможностей, существует способ, который облегчит процесс развертывания ваших веб-сайтов из Code в Microsoft Azure. При помощи сервиса Visual Studio Online.

Возможности VisualStudioCodeдля JavaScriptразработчиков

Достаточно большое количество разработчиков используют Visual Studio Code для построения веб-приложений и здесь следует упомянуть JavaScript, и сопутствующие технологии, такие как Node.js, TypeScript и т.д. Visual Studio Code предоставляет множество интерфейсных возможностей для JavaScript.

Ещебольшевозможностейс TypeScript

В случае некоторых действительно сложных проектов у разработчиков появляется проблема с поддержкой JavaScript кода, ведь в сравнении с C#, C++ и Java, языку JavaScript не хватает статических типов, классов, интерфейсов и других атрибутов современных ООП языков. В результате, классические средства разработки лишены многих полезных возможностей, связанных с IntelliSense и рефакторингом, а найти ошибки становится не очень просто.

Именно поэтому многие разработчики предпочитают TypeScript, CoffeScript или системы наподобие Dart.

TypeScript достаточно популярный язык на сегодня и имеет «родную» поддержку в Visual Studio Code.

Оцените работу с Node.js в новом редакторе кода

Точные проблемы с Visual Studio 2010

У меня есть приложение, написанное в Microsoft Visual С++ 6.0. Теперь я переписал приложение в Visual Studio 2010 с помощью С#, но результаты не совпадают из-за проблем с точками. Одна из таких проблем точности следующая:

Это код С# при запуске в Visual Studio 2010 дает c value = 0.333333343

Но тот же код, удаляющий f после значения в определении значения, при запуске на Visual С++ 6.0 дает c value = 0.333333 .

Может кто-нибудь разобраться и объяснить, как иметь одинаковое значение для c в Visual Studio, а также в Visual С++ 6.0??

Фактически значения берутся из окна просмотра. Я узнал, что разные версии визуальной студии могут отличаться в представлении формата с плавающей запятой. Следовательно, значения в часах могут оказаться нецелесообразными. Именно по этой причине я напечатал значения в обеих версиях визуальной студии, и результаты выглядят следующим образом. с визуальной студией 6.0 с использованием визуального языка С++ это 0.333333 (шесть 3)

но с визуальной студией 10, использующей язык С#, это 0.3333333 (семь 3-х)

Так может ли кто-нибудь помочь мне сделать мою программу С# для получения того же результата, что и визуальный С++. (например, как сделать плавающие операции для получения одинаковых результатов для обеих версий?)

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих