C# — Помогите с программой на C#


Содержание

Уроки C#

Уроки C# (C sharp) | #1 — Что такое C# и зачем он нужен?

Видеоурок

Благодаря незаурядной мощности языка, на него пал выбор разработчиков движка Unity . Сегодня является одним из топовых движков для игр на Windows. Выпуск и активное использование движка пошли на руку C#, который стал ещё популярнее.

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

Если сравнить С# с прочими языками, его можно назвать довольно молодым, хотя за плечами уже пройден немалый путь. Впервые полноценная версия языка появилось после выхода Microsoft Visual Studio .NET, событие датируется февралём 2002 года. На сегодня актуальная версия — C# 7.0, выпущенная 7.03.2020 параллельно с Visual Studio 2020.

В C Sharp используется синтаксис, сильно напоминающий Си и приближённый к С++ , Java . Если есть познания в одном их перечисленных языков, изучить C# станет значительно легче. Это объектно-ориентированный язык, который немало позаимствовал из С++ и Java. Для примера, С# обладает поддержкой наследственности, полиморфизма, повторную загрузку операторов, статической типизации. Такой подходит помогает в решении распространённых задач в сфере разработки крупных приложений, сохраняющих гибкость, расширяемость и масштабируемость. C# всё ещё развивается, после каждого дополнения в языке появляются новые функции, преимущественно довольно полезные. Среди них: асинхронная работа, переменное связывание, лямбды и т. п.

Какова роль .NET?

Если речь заходит о C#, часто подразумеваются технологии, связанные с платформой .NET (WPF, ASP.NET). То же самое справедливо в обратном направлении, говоря про .NET, думают про C#. Безусловно, понятия имеют жёсткую взаимосвязь, но не являются синонимами. C# — это язык, созданный для взаимодействия с фреймворком .NET. Тем не менее .NET – это довольно широкое понятие.

Сейчас вспоминаются слова Билла Гейтса, не дословно, но смысл таков: « Платформа .NET – лучшее творение Microsoft ». Может так и есть, ведь фреймворком очень мощный и постоянно используется в разработке приложений.

Ключевые черты платформы:

  • Работает параллельно с разными языками. Популярностью С# во многом обязан общеязыковой среде CLR. Сейчас платформа способна работать с С#, VB.NET, C++, F#, но и на этом список не заканчивается, ведь она работает с диалектами, что привязаны к .NET (наподобие Delphi.NET). После компиляции кода с любого из перечисленных языков, вся интерпретируется в общий язык CIL – это своеобразный ассемблер для .NET. Такой подход позволяет использовать несколько языков для создания подключаемых модулей программы;
  • Кроссплатформенность. Данную платформу реально переносить, хоть и есть отдельные ограничения. Сегодня актуальная версия фреймворка работает на всех поддерживаемых Виндовс: от Windows Vista до «десятки». За счёт проекта Mono появилась возможность разрабатывать программы под Linux (различные дистрибутивы), Android и iOS;
  • Обширная библиотека классов. .NET Framework обладает единой, унифицированной библиотекой классов, с которой работают все поддерживаемые языки. Библиотека классов пригодится при создании любых программ: от блокнота до огромного веб-сайта;
  • Масса встроенных технологий. Среда CLR в сочетании с библиотекой классов – это основа для большого пакета вспомогательных технологий. Их могут использовать все программисты во время разработки приложений. В качестве примера, при взаимодействии с базами данных можно использовать технологию ADO.NET. Во время создания графических редакторов с многочисленными функциями удобно использовать WPF. Во время веб-разработки наверняка используют ASP.NET.

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

Управляемый и неуправляемый код

Некоторые читатели уже слышали, когда о приложении, построенном на С#, говорят – управляемый код. Какой смысл этого выражения? Это означает, что программа базируется на .NET и поддерживает управление общеязыковой средой CLR. Вы же помните, как CLR самостоятельно очищает память. Существуют и другие приложения, разрабатываемые на C++, они не преображаются в унифицированный CIL-язык (свойственный для С#, VB.NET). На выходе – это стандартный машинный код. Таким приложением .NET не может управлять.

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

JIT-компиляция

Исходный код C# компилируется в программы или отдельные сборки на CIL с расширениями dll, exe. В процессе запуска готового приложения выполняется JIT-компиляция – это сокращение от Just-In-Time (Просто сейчас). На выходе получается машинный код, который передаётся на исполнение.

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

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

Это все базовые знания, которые нужно иметь в отношении платформы .NET

Дополнительные курсы

На нашем сайте вы можете найти дополнительные курсы по языку C#. Все курсы представлены на этой странице .

Примеры программ на языке C#

Здесь, со временем, будет много примеров программ на языке программирования C#…

Лабиринт 1.0

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

Делаем крутой парсер HTML страниц и парсим пару сайтов

Всем привет, На просторах интернета я обнаружил один интересный парсер, я добавил описание и немного доработав решил презентовать вам. Проект объемный поэтому запаситесь терпением. Лень читать статью вот готовый проект: Поехали, 1) Создаем проект WinForm, назовем его «SuperParser». 2) Сразу заходим в свойства формы и меняем св-ву Text значение на «SuperParser», size выставляем width 800 […]

Пример работы С#+Json

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

Делаем «однорукого бандита».

Всем привет, сегодня мы будем делать игровой автомат. Суть, у нас будет форма с 3 барабанами, каждый барабан будет содержать только цифры от 0 до 9. Игроку при старте игры будет даваться стартовые $100, он может делать ставки 5-10-15 и т.д до $50, после нажатия рычага, у игрока 5 попыток, выигрыш зависит от количества совпадений […]

Игра «Печатная машинка» на С#

Всем привет, сегодня мы напишем игрушку, суть следующая: В форме будут появляться случайные буквы. Если игрок вводит буквы правильно, они исчезают — уровень растет и буквы появляются все чаще. Если вся форма заполнена буквами игра окончена. Кому лень читать(ниже), могут сразу скачать проект Итак, начнем… 20+

Графическая «доска» на C# за 10 минут.

Всем привет, сегодня мы сделаем простую графическую программу. Кому лень читать (ниже) могут скачайте готовый проект Поехали. 1) Создаем WinForms проект, обзываем его «WinFormsApp_Paint» 2) Меняем для формы значение св-ва Text = «MyPaint» 3) Кидаем на форму 3 элемента Label, 1 элемент NumericUpDown, 1 кнопку. 4) Для label1 св-во Text = «Выбрать цвет». Расположить в […]

Создаем элемент управления для панели элементов(Toolbox) Visual Studio

Всем привет, Сегодня мы будем делать элемент управления(Control) для масштабирования изображений, мне на текущий момент известно 2 способа, один из них мы сегодня используем. Кому лень читать (ниже) могут скачайте готовый проект Поехали. 1) Создаем проект WinForm, называем его WinFormsApp_UserControls 2) Теперь добавляем элемент UserControl. 3) У нас открывается UserControl1.cs[Конструктор], переходим в свойства этого объекта, […]

Программа для просмотра изображений на C#

Всем привет, Сегодня сделаем софтину для просмотра картинок и гифок, программка будет короткой, но рабочей). Кому лень читать(ниже), могут сразу скачать готовый проект Поехали, 1) Cоздаем проект WinForms, даем название проекту WinFormsApp_ViewPicture 2) Свойству Text присваиваем значение «View Picture». 3) Кидаем на форму элемент PictureBox растягиваем его по краям, но оставляем снизу место для кнопки. […]

Делаем простой редактор txt

Всем привет, Сегодня мы будем делать редактор текстовых файлов, который будет уметь открывать уже существующие файлы и создать новые txt-файлы. Кому читать дальше лень, могут скачать готовый проект Поехали! 1)Создаем WinForms проект называем его, например, WinFormsApp_SimpleTextEditor 2) Кидаем на форму textBox и 2 кнопки, св-во name 1 кнопки = buttonOpen, 2-ой кнопки name = buttonSave. […]

Работает с картами в WinForms без использования JS! или Библиотека GMAP.net

Всем привет, Не давно был на одном из совещаний и там, один бизнес-аналитик показал, так называемую «тепловую» карту, на карту Москвы он вывел все торговые точки наших клиентов, в итоге можно было визуально оценить какие зоны у нас сильно загружены, средне и слабо. Однако, сделал он это с использованием JS+браузер. НО у меня с JS […]

Напишите программу на c#, которая запрашивает с клавиатуры названия кинотеатра и фильма, время сеанса и стоимость билета и выводит сообщение (например, если введено название кинотеатра «Колизей», название фильма «Явление», время сеанса «18:00», цена билета «150»): «Приглашаем в наш кинотеатр «Колизей». У нас вы можете посмотреть фильм «Явление» в 18:00. Цена билета 150 р.».

Ответ

Console.WriteLine(«Введите название кинотеатра «);
string kino = Convert.ToString(Console.ReadLine());
Console.WriteLine(«Введите название фильма «);
string film = Convert.ToString(«Console.ReadLine());
Console.WriteLine(«Введите время сеанса «);
string time = Convert.ToString(Console.ReadLine());
Console.WriteLine(«Введите стоимость билета «);
int cena = Convert.ToInt32(Console.ReadLine());

Console.WriteLine(«Приглашаем в наш кинотеатр «» + kino + «». У нас вы можете посмотреть фильм «» + film + » » в » + time + «. Цена билета » + cena + «р.»);

Если и в дальнейшем будет нужна помощь с C#, то пиши в сообщения, дам контакты.

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#. WinForms, WPF, ASP NET

Об этом кворке

Напишу программу на C# в среде программирования Visual Studio 2020. Делаю проект за 1 — 3 дня, в зависимости от сложности задания.

Любые версии dotNET Framework. Исходный код, проект для Visual Studio оставляю Вам.

На C# программирую более 3 лет. Могу писать курсовые. Знаю:

  1. WPF
  2. Windows Forms
  3. Консольные приложения
  4. ASP NET
  5. Работа с БД (Access: accdb, mdb. MSSql, MySql)
  6. Парсинг веб страниц
  7. Взаимодействие программы с Microsoft Office (Word, Excel)
  8. Работа с API сайтов
  9. Работа с ботами Telegram

Что Вы получите, заказав мой kwork:

  1. Скомпилированная программа под Windows (архив со всеми нужными файлами)
  2. Проект для Visual Studio (архив со всеми исходники и прочим)

Дополнительные услуги:

  1. Комментарии. Делаю подробные комментарии, почти к каждой строке кода.

От Вас требуется четкое ТЗ. Описание функций программы.

Если Вам нужна доработка уже существующей программы, то скидывайте ее проект для Visual Studio.

Если нужно, укажите версию . NET Framework. Более низкие версии — большая совместимость с Windows старых версий (XP, Vista).

Курсовой на C# — работа с БД, отчетами, диаграммами

Автор: EJim · Опубликовано 22.12.2020 · Обновлено 11.11.2020

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

На неделе нужно было сделать два других варианта курсовых. Поэтому решил описать процесс создания программы, чтобы и следующие работы выполнить быстрее, и описать алгоритм и нюансы работы с базой MS Access на C#. Может быть этот материал будет полезен и Вам. Работы делал в MS Visual Studio 2010, т.к. в наших ВУЗах свежий актуальный софт редкость (да и у студентов тоже). Возможно некоторых проблем не возникнет в более новых версиях студии.

Так выглядит общее задание на разработку программы:

Задание

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

И конкретное задание первого варианта:

Структура данных 1.
Абитуриенты по факультетам и специальностям
Фамилия | Экзаменационные оценки (Математика | Физика | Сочинение) | Сумма баллов
Специальности
Код специальности | Наименование | Факультет
Примечание: выполнить сортировку по убыванию суммы баллов с группировкой по факультетам и специальностям, вычислить количество абитуриентов по факультетам, специальностям, по вузу.

Варианты выбора пользовательских функций: Кнопки
Вариант диаграммы: Столбиковая

Полное задание на курсовой со всеми вариантами заданий: PPP_KP_2013.

Выполнение

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

По ТЗ нужно не менее двух таблиц, так что у меня для сделанных вариантов получалось по три-четрые таблицы — в зависимости от того, какие сущности можно выделить на основе таблиц задания.

Не смотря на то, что в MS Access можно давать имена объектам с пробелом. Делать этого не стоит, т.к. когда я дошел до создания отчетов с помощью компонента ReportViewer, возникли проблемы с полями в названии которых был пробел — имя поля обрезалось до первого слова, и поэтому не смог их использовать в отчетах. Возможно, что проблема есть только в Visual Studio 2010, и в более свежих версиях исправлена — не проверял. Когда с ней столкнулся, решения не нашел, и переделывал все под имена с символом подчеркивания вместо пробела.

Таблицы и формы

Итак проанализировал задание, создал таблицы и связи, заполнил их данными, создал запросы в MS Access. Для первого варианта у меня вышла следующая схема:

Создал интерфейс главной формы в соответствии с вариантом задания (могут быть кнопки, метки, меню, переключатели, вкладки), и остальные 7 форм. Подробно описывать все шаги нет смысла, т.к. код отображения форм, можно взять из любого готового проекта. А вот некоторые действия в визуальном редакторе Visual Studio стоит запомнить.

После добавления первого компонента DataGridView на форму, можно добавить источник данных проекта. В окне ниже обычно отвечал «Да», хотя это не принципиально.

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

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

Для расположения элемента TabControl во всю ширину/высоту родительского окна необходимо задать свойство Dock.

Согласно моей схеме базы данных между Факультетами и Специальностями связь один-ко-многим (не наоборот!) поэтому сначала выбрал отображение информации о факультетах:

Затем сделал связь факультета со специальностями:
Связь один-ко-многим между Специальностями и Абитуриентами реализовал в приложении:

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

В данном варианте на второй вкладке решил отображать данные об абитуриентах, поскольку они наиболее интересны. Но видимо из-за связи на первой вкладке Абитуриентов со Специальностями , поле Код таблицы Абитуриенты не получилось скрыть — оно просто не реагировало на задание свойства Visible в false. Поматерился на эту фичу и задал минимально возможную ширину в 2px для этого поля.

Далее мне понадобилось вычисляемое поле «Сумма баллов». Его добавил непосредственно в наборе данных DataSet. Для таблицы Абитуриенты добавил новый столбец и определил его свойство Expression: Математика + Физика + Сочинение

Чтобы отобразить в Абитуриентах вместо id значение поля из связанной таблицы Специальности нужно добавить «Непривязанный столбец» в интерфейсе правки столбцов элемента DataGridView, заодно выбрав его тип ComboBox:

Чтобы поле выглядело как обычное текстовое нужно поменять DisplayStyle на Nothing. В списке выбора для этого поля нужно отобразить все данные из таблицы Специальности, поэтому в DataSourse выбираем её непосредственно из набора данных DataSet. Далее настраиваем связь данных: в DisplayMember выбираем поле с названиями для отображения (Специальности.Наименование), в ValueMember — поле с id (Специальности.Код), в DataPropertyName значение id соответствующее ValueMember (Абитуриенты.Специальность).

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

Чтобы связанные таблицы корректно работали на событие CellEndEdit для всех DataGridView нужно повесить код аналогичный этому:

Примеры программ на языке C#

Здесь, со временем, будет много примеров программ на языке программирования C#…

Лабиринт 1.0

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

Делаем крутой парсер HTML страниц и парсим пару сайтов

Всем привет, На просторах интернета я обнаружил один интересный парсер, я добавил описание и немного доработав решил презентовать вам. Проект объемный поэтому запаситесь терпением. Лень читать статью вот готовый проект: Поехали, 1) Создаем проект WinForm, назовем его «SuperParser». 2) Сразу заходим в свойства формы и меняем св-ву Text значение на «SuperParser», size выставляем width 800 […]

Пример работы С#+Json

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

Делаем «однорукого бандита».

Всем привет, сегодня мы будем делать игровой автомат. Суть, у нас будет форма с 3 барабанами, каждый барабан будет содержать только цифры от 0 до 9. Игроку при старте игры будет даваться стартовые $100, он может делать ставки 5-10-15 и т.д до $50, после нажатия рычага, у игрока 5 попыток, выигрыш зависит от количества совпадений […]

Игра «Печатная машинка» на С#

Всем привет, сегодня мы напишем игрушку, суть следующая: В форме будут появляться случайные буквы. Если игрок вводит буквы правильно, они исчезают — уровень растет и буквы появляются все чаще. Если вся форма заполнена буквами игра окончена. Кому лень читать(ниже), могут сразу скачать проект Итак, начнем… 20+

Цукерберг рекомендует:  Пример использования jsShapeLib

Графическая «доска» на C# за 10 минут.

Всем привет, сегодня мы сделаем простую графическую программу. Кому лень читать (ниже) могут скачайте готовый проект Поехали. 1) Создаем WinForms проект, обзываем его «WinFormsApp_Paint» 2) Меняем для формы значение св-ва Text = «MyPaint» 3) Кидаем на форму 3 элемента Label, 1 элемент NumericUpDown, 1 кнопку. 4) Для label1 св-во Text = «Выбрать цвет». Расположить в […]

Создаем элемент управления для панели элементов(Toolbox) Visual Studio

Всем привет, Сегодня мы будем делать элемент управления(Control) для масштабирования изображений, мне на текущий момент известно 2 способа, один из них мы сегодня используем. Кому лень читать (ниже) могут скачайте готовый проект Поехали. 1) Создаем проект WinForm, называем его WinFormsApp_UserControls 2) Теперь добавляем элемент UserControl. 3) У нас открывается UserControl1.cs[Конструктор], переходим в свойства этого объекта, […]

Программа для просмотра изображений на C#

Всем привет, Сегодня сделаем софтину для просмотра картинок и гифок, программка будет короткой, но рабочей). Кому лень читать(ниже), могут сразу скачать готовый проект Поехали, 1) Cоздаем проект WinForms, даем название проекту WinFormsApp_ViewPicture 2) Свойству Text присваиваем значение «View Picture». 3) Кидаем на форму элемент PictureBox растягиваем его по краям, но оставляем снизу место для кнопки. […]

Делаем простой редактор txt

Всем привет, Сегодня мы будем делать редактор текстовых файлов, который будет уметь открывать уже существующие файлы и создать новые txt-файлы. Кому читать дальше лень, могут скачать готовый проект Поехали! 1)Создаем WinForms проект называем его, например, WinFormsApp_SimpleTextEditor 2) Кидаем на форму textBox и 2 кнопки, св-во name 1 кнопки = buttonOpen, 2-ой кнопки name = buttonSave. […]

Работает с картами в WinForms без использования JS! или Библиотека GMAP.net

Всем привет, Не давно был на одном из совещаний и там, один бизнес-аналитик показал, так называемую «тепловую» карту, на карту Москвы он вывел все торговые точки наших клиентов, в итоге можно было визуально оценить какие зоны у нас сильно загружены, средне и слабо. Однако, сделал он это с использованием JS+браузер. НО у меня с JS […]

Нехитрые Советы для программиста C#

1. Довольно часто нужно вернуть в коде истину , если число положительное , и ложь , если число отрицательное. Тогда , вместо того , чтобы писать что-то вроде этого :

public static bool TruOrFls (int i )

. можно написать такой простой код :

public static bool TruOrFls( int i)

2. Для определения , является ли целое число чётным или нечётным , можно использовать сл. метод :

public static bool IsNechet( int i)

Math .DivRem(i, 2, out result);

3. Простой класс для Шаблона «Одиночка » (Singleton) для создания форм :

public static class SingletonForm

private static Dictionary Type , Form > forms = new Dictionary Type , Form >();

public static Form ShowInstance( Type t)

Form f = ( Form ) Activator .CreateInstance(t);

f.Disposed += new EventHandler (f_Disposed);

static void f_Disposed( object sender, EventArgs e)

public void btnsprTIP_Click(System. Object sender, System. EventArgs e)

SingletonForm .ShowInstance( typeof ( frmMyForm ));

4 . Для «отлавливания» неверно введённого символа в сетке( DataGr >можно использовать событие DataError :

public void MyDtg_DataError( object sender, DataGridViewDataErrorEventArgs anError)

int ColIndx = ( int )anError.ColumnIndex;

string ColHT = MyDtg.Columns[ColIndx].HeaderText;

Utils .Mess( » » + ColHT + » !» );

5. Помещайте формы , классы , отчёты и т д. проекта в соответствующие подкаталоги с именами , например , FRM, CLS, RPT и т.д. Такая систематизация существенно облегчит вашу жизнь при работе с большими проектами. Мешанина из классов , форм , отчётов и пр. в одном подкаталоге вряд ли пойдёт на пользу качеству вашего проекта.

6. Если нужно постоянно обращаться к какому-то объекту ( или что-то возвращать из метода без передачи параметра внутрь его) , то такую функцию удобно осуществлять с помощью аксессора get . Например , сл. код возвращает текущую строку в DataGrid View:

public DataGridViewRow GetCurrentRowOb

К такому методу можно обращаться просто как к переменной.

7. Вы можете назначить свою обработку какого-либо события в конструкторе сл. образом :

/* Альтернативная обработка события */

this .txtHr.KeyPress += new KeyPressEventHandler ( this .ObrabKey);

В приведённом примере назначаем метод обработки ObrabKey событию KeyPress

8. Технология LINQ может существенно сократить количество ваших клацаний по клавиатуре. Например сл. код возвращает отсортированный массива :

public static string [] GetStr

public static IEnumerable string > SortedList

IEnumerable string > sort = GetStr.OrderBy(a => a.j);

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

10 . Довольно часто приходиться итерировать объекты , которые не поддерживают интерфейс IEnumarable. Чтобы избежать это ограничение , существует специальная конструкция — yeild. Ниже приведён пример , как можно проитерировать коллекцию упр. элементы на главной форме :

class Num : IEnumerable

frmMain MyF = GlobalVar .MainForm;

public System.Collections. IEnumerator GetEnumerator()

yield return MyF.Panel1;

yield return MyF.Panel2;

yield return MyF.Panel3;

yield return MyF.panel6;

yield return MyF.GroupBox1;

yield return MyF.groupBox2;

yield return MyF.GroupBox3;

yield return MyF.TableLayoutPanel1;

yield return MyF.pictureBox1;

Вот теперь можно пробежаться в цикле -применение в вызывающей стороне :

foreach ( Control cob in new Num ())

cob.Anchor = AnchorStyles .Right;

11. Использование конструкции using ( . ) < . >гарантирует применение метода . Dispose() — освобождение объекта , например :

using ( SqlCommand cmd = new SqlCommand (strSQL, GlobalVar .conn))

// Здесь что-то делаем с объектом cmd .

// Это нужно делать , если не использовать using (. )

1 2 . При работе с базами данных обязательно напишите класс с методами создания соединения с БД и его тестированием , что-то вроде этого :

static class clsConn

public static void CreateConn( string strmydir)

GlobalVar .conn = new SqlConnection (ConnectStringBuild);

Utils .Mess( » Ошибка !» );

public static bool TestConn

using ( SqlConnection testconn = new SqlConnection (ConnectStringBuild))

return (testconn.State == ConnectionState .Open);

// Создание строки подключения к БД .

public static string ConnectStringBuild

string s = «Data Source=» + My. Settings .Default.ServerName + @»\» + My. Settings .Default.SQLServerName + «;» ;

return @s += «Initial Catalog=» + My. Settings .Default.BaseName + «;Integrated Security=True» ;

13. Включите обработку ошибок в стартовый модуль вашей программы. Выше него ошибка » не поднимется «( выше только Господь Бог :-). Что-то вроде этого :

sealed class mdlMain

public static void Main( string [] args)

Application .SetCompatibleTextRenderingDefault( false );

GlobalVar .MainForm = new frmMain ();

Application .Run( GlobalVar .MainForm);

catch ( ArgumentNullException ane)

MessageBox .Show(ane.Message, » Main-ArgumentNullException» );

catch ( FormatException fex)

MessageBox .Show(fex.Message, » Main-FormatException» );

catch ( NullReferenceException nre)

MessageBox .Show(nre.Message, » Main-NullReferenceException» );

catch ( InvalidCastException ice)

MessageBox .Show(ice.Message, » Main-InvalidCastException» );

catch ( Exception ex)

MessageBox .Show(ex.Message , » o Main» );

14. Если в программе постоянно приходиться обрабатывать неизменяемый массив строк , то инициализацию такого массива очень удобно оформить с помощью аксессора get ( см. Совет 6 ) , что-то вроде этого :

private static string [] GetStringArr

string [] ars = new string [] <

Тогда подсчитать , например , количество элементов в массиве очень просто :

int RecCount1 = GetStringArr.Count();

Или , обращение к j- му элементу массива :

string s = GetStringArr[j-1];

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

public static float CheckIt( object par)

return ( Convert .ToSingle( Convert .IsDBNull(par) ? 0 : par));

16. Если нужно знать , в каком столбце сетки DataGridView пользователь завершил редактирование ячейки , то можно использовать событие _CellEndEdit:

public void MyDtg_CellEndEdit( object sender, DataGridViewCellEventArgs e)

// Узнаём имя столбца .

string ColName = MyDtg.Columns[e.ColumnIndex].Name;

/* Здесь что-то делаем . */

17. Чтобы ‘ пробежаться ‘ по всем контролам в панели , и отловить , ну скажем , метки ( Label ) можно использовать такой код :

foreach ( Control cob in this .panel 1 .Controls)

if (cob is Label )

/* Здесь что-то делаем с контролом типа Label */

18. К строковой переменной можно смело «приклеивать » целочисленные переменные. Среда CLR поймёт такое преобразование без метода ToString(). Это особенно бывает удобно при формировании SQL— запросов в виде строк , что-то вроде этого :

string sSQL= «Update Itogi SET Area=@area where kod=» + (i + 1);

19. ‘Склеивать’ строки лучше специально созданным для этого методом Concat для переменных типа string :

string s3 = «three» ;

// Можно делать так :

string sAll = s1+s2+s3;

// . но грамотнее так :

string sAll = string .Concat(s1,s2,s3);

20. П рограммисты как-то недооценивают удобство метода Format для строк при формировании SQL-запросов . Например, вместо того, чтобы писать что-то вроде этого:

// Можно делать так :

string strUpdate = «Update Customers SET Balance=@Balance Where Cust > + >» and Social > + SocID;

. лучше написать такой код:

string strUpdate = «Update Customers SET Balance=@Balance Where Cust >;

string strSQLUpdate = string. Format( «<0> <1>and Social >, strUpdate, ID, SocID);

21. Иногда бывает нужно узнать индекс элемента в массиве, ну например, в цикле foreach . Сделать это можно сл. образом :

// Есть массив строк .

private static string [] GetStr

string [] ars = new string [] <

// В вызывающей стороне :

// Конечно , можно использовать счётчик .

foreach ( string s in GetStr)

private static void Sub()

foreach ( string s in GetStr)

//Узнаём индекс элемент а s в массиве .

int i = Array .IndexOf(GetStr, s);

22. Везде, где можно, предпочтительнее использовать типизированные коллекции, вместо классических массивов. Основные преимущества такого подхода заключаются в двух фактах: во-первых, коллекции позволяют не заботиться о контроле за выходом индекса за установленный размер ( пресловутое Index Out of Range), а во-вторых, в них можно хранить (в отличии от нетипизированных списков) элементы одного типа. Итак, вместо использования скажем:

string [] ars = new string [6];

. предпочтительнее использовать типизированный список List string >:

List string > ars = new List string >();

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

23. Если в метод надо передавать много-много всяких входных параметров, то вместо такого «баяна» предпочтительнее передавать структуру.

Например, вместо использования некоего метода XYZ

static void XYZ( int a, int b, int c, string d, string e)

. .. можно сначала определить структуру:

public string d,e;

public ABC ( int _a, int _b, int _c, string _d, string _e)

a=_a; b=_b; c=_c; d=_d; e=_e;

. а затем передавать её в метод :

static void XYZ( ABC mystru)

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

/* Определяем экземпляр структуры ABC */

ABC MyStru = new ABC (1,2,3,»one», «two»);

/*Вызываем метод XYZ */

24. Довольно часто программисты пользуются методом Parse для конвертации строковых величин в другие типы, что-то вроде этого:

int j= int .Parse (MyVal.ToString());

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

/* Вернёт значение j=0, даже если метод TryParse потерпит неудачу */

bool bVal = int .TryParse(MyVal.ToString(), out j);

25 . Самый подходящий элемент для отображения содержания базы данных — это конечно же DataGr >, упрощенно говоря, сетка данных . Но после завершения редактирования данных пользователем в такой сетке встаёт задача — как передать изменения в базу данных ? Одно из решений такой задачки состоит в переписывании (в цикле естественно) значений ячеек сетки DataGridViewCell в значения объекта DataRow , привязанного к сетке объекта DataTable набора данных DataSet . Тут, правда, надо хорошо разбираться в идеологии объектной модели доступа к данным ADO. NET . Затем значения DataRow конкретного столбца переписываем SQL-конструкцией Update непосредственно в базу данных. Все циклы здесь можно прогонять конструкцией foreach

26 . Иногда возникает сл. ситуация. На форме есть куча однотипных элементов WinForms, одно и тоже событие которых обрабатывается одинаково. Как пример, есть несколько элементов TextBox, для которых событие, ну скажем, KeyPress обрабатывается одним и тем же методом.

Тогда, вместо такого забойного кода . :

public void txt box1 _KeyPress( object sender, KeyPressEventArgs e)

ObrabKeyPress ( sender, e );

public void txt box 2_KeyPress( object sender, KeyPressEventArgs e)

ObrabKeyPress ( sender, e );

public void txt boxN _KeyPress( object sender, KeyPressEventArgs e)

ObrabKeyPress ( sender, e );

. можно сначала определить массив TextBox’ов :

private TextBox [] RetTBox

. а затем, скажем в конструкторе формы, прокрутить такой цикл :

/* Добавляем свой обработчик контроля нажатия клавиш */

foreach ( TextBox tb in RetTBox)

tb.KeyPress += new KeyPressEventHandler (ObrabKeyPress);

27 . У объекта ADO.Net Reader есть один весьма полезный метод — HasRows. Он возвращает значение true , если в запросе есть данные.

Проконтролировать наличие ‘ пустого ‘ Reader’ а в это случае становиться довольно легко :

using ( SqlCommand SelCustoms = new SqlCommand (sSel, conn2))

//Нет записей о заказчиках ! Прекращаем читать ..

// Пробежимся по всем записям Заказчиков .

// . Здесь что-то читаем Reader’ом

28 . Хорошей альтернативой созданию параметров в простых SQL- запросах ( объект Parameters) может стать использование строки запроса методом string .Format ( см. Совет 20 ) , что-то вроде этого :

string sSQL = string .Format( «Select * From Customers where Customer >, CustID);

SqlCommand cmd = new SqlCommand (sSQL, conn2)

Объём кода при этом значительно сокращается — необходимость описывать параметр , его тип и значение просто отпадает.

2 9 . Приступая к созданию своего первого более-менее сложного проекта , не забудьте создать класс для размещения в нём всевозможных мелких вспомогательных утилит. Фактически , наличие такого класса (как правило с именем Utils ), стало стандартом для проектирования информационных систем на С #. Получиться что-то вроде аналог ящика для инструментов , из которого вы сможете время от времени доставать нужное (по контексту ситуации) приспособление.

30 . Создание глобальных переменных , видимых из любой части программы , является одним из стандартных положений для разработчика любого уровня . Чаще всего , такая необходимость связана с использованием каких-то глобальных настроек программы. Одним из решений этой задачи является использование настроек — пространство имён My. Setting . Тогда достаточно будет написать , ну скажем в классе Utils ( см. Совет 29 ) , простой метод для ‘ выдёргивания ‘ значения этой настройки , что-то вроде этого (в приведённом ниже примере , если уж рассматривать совсем конкретный случай , просто взят год , принятый по умолчанию) :

public static int GetGodSetting

return ( int .Parse)(My.Settings. Default .god);

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

int God = Utils .GetGodSetting;

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

Цукерберг рекомендует:  Новый курс по С#. Работа с API Вконтакте

public void Btn1_Click(System. Object sender, System. EventArgs e)

// Здесь что-то обрабатываем при нажатии на кнопку Btn1

public void Btn 2 _Click(System. Object sender, System. EventArgs e)

// Здесь что-то обрабатываем при нажатии на кнопку Btn 2

public void BtnN_Click(System. Object sender, System. EventArgs e)

// Здесь что-то обрабатываем при нажатии на кнопку BtnN

. можно создать класс ну скажем clsClickBtn , в который вынести все методы обработки при нажатии на кнопку , а в конструкторе формы разместить сл. код :

Btn1.Click += new EventHandler ( clsClickBtn .Btn1_Click);

Btn2.Click += new EventHandler ( clsClickBtn .Btn2_Click);

BtnN.Click += new EventHandler ( clsClickBtn .BtnN_Click);

Код формы в этом случае может сильно ‘ похудеть ‘ .

04. 12 .2013 , г. Юрьевец

32 . Ещё один подход к обозначенной в п. 31 проблеме может быть следующий.

Сначала создаём структуру ну допустим для обработки нажатий на гиперссылку LinkLabel :

public LinkLabel l;

public LinkLabelLinkClickedEventHandler h;

public struLL( LinkLabel _l, LinkLabelLinkClickedEventHandler _h)

Далее создаём список из обозначенной выше структуры , что-то вроде такого :

private List struLL > GetLLList

List struLL > opList = new List struLL >();

opList.Add( new struLL (lL _ A, clsLLblClick .MethodA));

opList.Add( new struLL (lL _ B, clsLLblClick .MethodB));

opList.Add( new struLL (lL _ Z, clsLLblClick .MethodZ));

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

foreach ( struLL ll in GetLLList)

3 3 . Каким образом можно проитерировать управляющие элементы (контролы в просторечии) на форме ? Один из подходов описан в Совете 26 . Но существует ещё одно решение , пожалуй даже более изящное и простое. Заключается оно в том , что нужные контролы просто помещаем на форме в какой-либо контейнер , типа Panel . В этом случае в конструктор формы помещаем такой простой код (как пример для Кнопок — объект Button ) для обработки нажатий :

// Цикл по кнопкам в панели 1 .

foreach ( Button btn in panel 1 .Controls)

btn.Click += new EventHandler (btnClik);

34. При работе со справочниками часто требуется вернуть значение кода (ключа) по значению описания ключа. Конечно , можно для решения такой задачки создать структуру с двумя полями. Но гораздо проще воспользоваться одной из уже существующих коллекций — например словарем Dictionary . Тогда указанный подход можно продемонстрировать на сл. примере.

Создаем следующий метод :

public static int ReturnKodTown( string s)

Dictionary int, string > DicTowns = new Dictionary int, string >();

DicTowns.Add( 2 , » Санкт-Петербург » );

DicTowns.Add( 3 , » Казань » );

DicTowns.Add( 4 , » Новосибирск » );

DicTowns.Add( 5 , » Краснодар » );

return DicTowns.First(a => a.Value == s).Key;

Теперь узнать код города для нашего примера очень легко :

string gorod = » Новосибирск » ;

int kod = ReturnKodTown (gorod);

35. При использовании параметризованных SQL- запросов предпочтительнее пользоваться более современным методом . AddWithValue вместо .Add. Указывать тип поля при таком подходе не обязательно , нужно только указать параметр и его значение :

var myCMD = new SqlCommand (strInsSvod, GlobalVar.conn)

var pars = myCMD.Parameters;

// Используем метод AddWithValue

pars.AddWithValue( «@myPar» , myVal);

36. В развитии темы использования более рациональных подходов создания параметризованных запросов ( Совет 35 ). У коллекции параметров Parameters объекта Command есть ещё один полезный метод , позволяющий загрузить п a раметры в запрос массивом. Называется он . AddRange :

// Готовим массив параметров .

private static SqlParameters [] GetMyPars

new SqlParameter ( «@par2» , myVal2)),

new SqlParameter ( «@parN» , myValN))

// Использование метода . AddRange

using ( var cmd = new SqlCommand (s, GlobalVar.conn))

var pc = cmd.Parameters;

3 7 . При инициализации коллекций типа List вместо такого кода :

List string > MyList = new List string >();

MyList. Add( » один » ) ;

. можно использовать более короткую эквивалентную запись :

3 8 . При работе с коллекциями иногда хотелось бы не только проитерировать их в одном операторе , но и совершить какую-то обработку. В качестве примера , предположим , что есть массив :

. и для значений массива меньше или равно 5 , нужно умножить на 2 , а для более 5 умножить на 3.

Здесь на помощь может придти делегат Func и блочный лямбда-оператор. Что-то вроде этого ( понятное дело , блочный лямбда-оператор может быть много сложнее и состоять не из одной строки , как в случае нашего простенького примера) :

Func int , int , int > myFunc = (z, y) => <

return ( z y) ? 2 * z : 3 * z ;

Теперь , чтобы получить массив обработанных значений gruppa , можно написать такой простой код одной строчкой ( никакого foreach не нужно ! ) :

var gruppa = myInt.Select(a => myFunc(a, 5)).ToArray();

10 .01. 2015 , г. Обнинск

40. Назначить свой обработчик событий, скажем, для ввода данных в TextBox можно еще и с использование лямбда-оператора сл. образом ( м етод MyObrabKeyPress ) :

textBox1.KeyPress += (o, e) => MyObrabKeyPress( o, e);

Тогда , даже можно создать свой метод для обработки нажатий в нескольких контролах , что-то вроде такого :

textBox1.KeyPress += (o, e) => MyObrabKeyPress( o, e);

textBox2.KeyPress += (o, e) => MyObrabKeyPress( o, e);

textBox3.KeyPress += (o, e) => MyObrabKeyPress( o, e);

textBoxN.KeyPress += (o, e) => MyObrabKeyPress( o, e);

Затем , такой метод лучше всего поместить в конструктор формы , на которой расположены наши контролы ( TextBox’ ы для случая нашего примера) :

41. Тем , кто создает приложения для работы с базами данных, случается иметь дело с весьма ‘забойными’ SQL-запросами, которые могут занять десятки строчек кода. Но хранить такие запросы в тексте программы, несмотря на определенное удобство для разработчика (код запроса виден прямо в теле программы) не всегда изящно по причине необходимости ‘ сцепки ‘ строчек в запросе. И здесь возможно два варианта решения задачи хранения ‘ тяжелых ‘ запросов. Первый заключается в перемещении запроса непосредственно в базу данных в виде хранимой процедуры ( Store Procedure) . Второй путь связан с перемещением скрипта в строковую переменную в Настройки ( Setting, см. п.30 )

42. В продолжении темы п.41 . В код программы на C# ‘запилить’ длинный SQL-запрос можно используя символ литерала ‘@’. В этом случае отпадает необходимость в конкатенации строк. Выглядит такая конструкция может приблизительно сл. образом :

string mySql = @»Первая длинная строка запроса

Вторая ну очень длинная строка запроса

Третья длинная строка запроса

Последня я строка ну очень длинного запроса» ;

Программирование на C, C# и Java

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

Легкий уровень

ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode

Получение информации о жестких дисках на компьютере – язык C#

На языке C# достаточно легко получить информацию о локальных дисках компьютера – для этого есть специальный класс в NET FRAMEWORK. Из урока вы узнаете, как вывести основную информацию о хранилищах и дисках на компьютере в консоль.

Перенос строки в TextBox с Multiline

Покажем, как выполнить перенос строки в TextBox с атрибутом Multiline (когда текстовое поле занимает несколько строк). Сделаем это на примере программы в Windows Forms и языка C#.

Вычисление суммы квадратов чисел

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

Поменять значения двух переменных

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

Бесконечный цикл

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

Инкремент и декремент

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

Поиск подстроки в строке

Поиск подстроки в строке – это задача с которой программистам приходится часто сталкиваться. В статье показывается способ решения данной задачи. Материал урока будет полезен начинающим. Рассмотрим поиск подстроки в строке на Java и C#.

Шифр Виженера

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

Как подсчитать количество слов в файле C#

В данной теме мы решили объединить две предыдущие статьи – это Программа, которая выводит на экран содержимое файла и Как подсчитать количество слов в тексте С#, и создать программу на языке C#, которая вела бы подсчёт слов в файле.

Как подсчитать количество слов в тексте С#

Сегодня мы узнаем самый простой и примитивный способ подсчета количества слов в тексте с помощью C#. Данный вариант состоит всего из нескольких строк и прост в реализации. Итак, создадим программу, в которой пользователь будет вводить в консоль текст, а программа будет…

Введение в C# (C Sharp): программирование простым языком

Начинаем писать статьи направленные на формирование представления о простейших составляющих написания кода для людей. Сегодня материал для тех, кто только начавших изучение языка C# Sharp (Си Шарп). Всяк ступивший на стезю сотворения алгоритма да не убоится неизвестности, бардака и самозабвения.

О языке программирования C#

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

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

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

С# (С Sharp, Си Шарп) – объектно-ориентированный язык программирования. Что это означает? Объект – участок кода, содержащий в себе данные и инструкции по их обработке.

Пример

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

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

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

Алгоритмы и компиляторы

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

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

Прежде всего, компиляторы (программы, в которой пишутся программы) очень чувствительны к регистру. Все операторы, переменные и команды нужно запоминать и писать в точности так, как они написаны в справочниках. То есть, переменная a и переменная A – совершенно разные переменные, а если будет написана строчка console.writeline(“”); вместо Console.WriteLine(“”); то будет выведена ошибка и, если повезет, правильно указано ее местоположение.

Пунктуация

Следующий «подводный камень» — пунктуация. Ситуация сравнима с диктантом по русскому языку у придирчивого преподавателя. Пропустите знак хоть в одном месте – программа откажется работать.

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

Для начала разберемся с основными значками:

  • Знак «;»
  • Знаки «//» и пара «/*» и «*/»
  • Знаки «< >»
  • Знаки «» «»

Знак «;» прописывается в конце строки. Он обозначает для компьютера конец команды и разрешение приступить к следующей. Его смысл аналогичен точке в конце предложения: «Я есть Грут; Грут самый лучший юморист; Правда ли он симпатяга;».

Да, с эмоциями здесь натянуто. Впрочем, можно высказаться внутри знаков «//» и «/* */». Первый используется для заметок размером в одну строку, второй нужен для более распространенного текста. Они говорят компьютеру, что содержимое внутри пространства, обрамленного такими значками, не имеет к нему никакого отношения. Программист заключает в них комментарии, помогающие при отладке кода. «< >» нужны для обозначения границ конкретно взятого объекта.

Грубо говоря, их можно сравнить с обложкой тетради. Их функция – заключения внутри себя участка кода. Они являются привычным атрибутом многострочного программного текста, заключенного внутри команды. А парочка «” “» используется внутри текстовых операторов для помещения непосредственно текста для выведения на экран.

Начало программы

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

Так, Console.WriteLine хранится в библиотеке System.Text, в которой сказано, что программа должна вывести на экран текст внутри кавычек. Минимальный набор выглядит таким образом:

Следующая немаловажная деталь – Main(). В переводе с английского «главный», что прямо намекает на его назначение. Исполнение алгоритма начинается с кода, заключенного внутри Main().

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

Это включение предполагает, что программа, исполнив свою инструкцию, удалит все данные. Напоминает вывеску в столовой: «Поел – убрал за собой». Напоследок можно разобрать две простейшие команды: Console.WriteLine и Console.ReadLine.

Console.WriteLine(“”); призвана вывести на экран текст, заключенный внутри кавычек. Пример с этим оператором разобран в скриншоте выше, поэтому сразу перехожу к другой команде.

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

Заключение

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

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