Provide feedback
Saved searches
Use saved searches to filter your results more quickly
Sign up
Appearance settings
Рассмотрим создание потоков на языке Visual C++. На примере программы в Visual Studio разберем основы и применение необходимых классов. В конце урока вы найдете видео, в котором тема раскрывается более подробно.
Несомненно в языке C# и фреймворке .NET есть средства для печати документов и текста с помощью принтера. В данной статье описано, как вывести на печать текст программно. А для тех, кто больше любит смотреть, чем читать — в конце материла находится видеоурок…
Компонент ListView (из Windows Forms) предназначен для вывода текстовых данных. Создавая столбцы в нем, нельзя выбирать тип данных (например, изображения). Тем не менее способ вывода изображений в элемент управления ListView существует. Рассмотрим его на примере.
Рассмотрим выполнение запросов SELECT, INSERT, UPDATE и DELETE к базе данных Microsoft Access из программы на языке C#, на примере проекта Windows Forms в Visual Studio. В конце статьи вы найдете исходники, а также видеоурок по данной теме.
Шифр перестановки (перестановочный шифр) — это один из видов блочного шифра. В статье разберем алгоритм шифрования и реализуем его на языке C# в проекте Windows Forms.
В Windows Forms табличные данные удобно выводить с помощью элемента управления DataGridView. В статье покажем, как это сделать на примере таблицы из базы данных и языка программирования C#.
В статье рассмотрим алгоритм перевода цветного изображения в черно-белое и напишем его реализацию на языке C#. Приводится исходный код программы, написанной в Visual Studio — приложение Windows Forms.
В статье рассмотрим способ создания «резинового» интерфейса в формах Windows Forms и разберёмся, как растянуть элементы на форме при изменении размера окна программы.
Покажем, как выполнить перенос строки в TextBox с атрибутом Multiline (когда текстовое поле занимает несколько строк). Сделаем это на примере программы в Windows Forms и языка C#.
Задача о рюкзаке — это одна из самых популярных задач комбинаторной оптимизации. В этой статье рассмотрим её формулировку и выполним решение одним из методов с помощью языка программирования C#.
Приложения Windows Forms
Если вы захотите писать программы, похожие на привычные приложения Windows, то наверняка воспользуетесь классами из пространства имен System.Windows.Forms. Они позволяют задействовать кнопки, списки, текстовые поля, меню, окна сообщений и множество других «элементов управления». Элементы управления — это то, что вы помещаете в форму. Они нужны для вывода информации, например, текстовой (элемент управления Label ) или графической (элемент управления PictureBox ), либо для выполнения определенных действий, например, выбора значения или перехода к другой форме после нажатия кнопки. Все элементы управления помещаются на форму.
Понятие «форма», принятое в программировании, родственно понятию «форма анкеты» или «форма документа» из обычной жизни. На форме можно в определенном порядке расположить различные элементы (текст, картинки, поля для заполнения и т. д.). Когда нам дают готовую форму документа и просят ее заполнить, мы обычно читаем содержащуюся в ней типовую информацию, а затем вписываем недостающие данные в определенные строки.
В программировании понятие формы во многом похоже: форма позволяет размещать текст, изображения, поля ввода, кнопки и т. п., добиваясь их точного расположения на экране. В консольном приложении на экран выводятся только строки текста.
Компания Майкрософт предоставила в составе библиотеки классов .NET Framework огромное количество «элементов управления», которые можно помещать на формы. Освоив этот инструмент, вы сможете быстро создавать эффектные приложения.
Некоторые полезные классы из пространства имен System.Windows.Forms
Вот некоторые элементы управления, которые можно размещать на формах:
- Label (Надпись).
- Button (Кнопка).
- ListBox (Список).
- CheckBox (Флажок).
- RadioButton (Переключатель).
- MessageBox (Окно сообщений).
- Menu (Меню).
- TabControl (Управление вкладками).
- Toolbar (Панель инструментов).
- TreeView (Дерево).
- DataGrid (Сетка данных).
- PictureBox (Изображение).
- RichTextBox (Текстовое поле с поддержкой формата RTF).
Работа с примерами программ Windows Forms в Visual C# Express
Возможно, вы предпочтете не использовать уже заготовленные примеры проектов, а разрабатывать их «с нуля». В таком случае нужно учесть, что для каждого проекта C# Express сразу же создает два файла (с именами Form1.cs и Program.cs ) и наполняет их исходным кодом на языке C#, то есть вы изначально получаете простейшую, но полноценную программу. Предлагаемый нами способ работы с уже полученным проектом состоит в выполнении следующих действий:
- Удалите файл Form1.cs.
- Замените код в файле Program.cs на код примера, с которым вы работаете.
Оба этих действия не понадобятся, если вы открываете программы с помощью команды «Открыть проект» в меню «Файл» и находите нужный проект в той папке, куда его поместили после разархивации.
Пример программы 3.3
Рассмотрим пример простейшего приложения Windows Forms. Оно всего лишь создает новую форму и выводит определенный текст в заголовок окна формы.
using System.Windows.Forms; class SimpleWindowsForm : Form { // Метод-конструктор нашего класса public SimpleWindowsForm() { // Указываем заголовок окна this.Text = "Это простая форма с заголовком"; } static void Main() { // Создаем новый экземпляр класса //и запускаем его на выполнение // В результате на экране дисплея откроется форма Application.Run(new SimpleWindowsForm()); } }
Листинг
3.3.
Пример программы 3.4
Следующий пример тоже достаточно прост, но мы делаем шаг вперед — размещаем на форме кнопку.
using System.Windows.Forms; class SimpleWindowsFormWithButton : Form { Button button1; // Метод-конструктор нашего класса public SimpleWindowsFormWithButton() { // Указываем заголовок окна this.Text = "Форма с командной кнопкой"; // Добавляем кнопку в коллекцию элементов управления формы // Хотя на кнопке написано: "Нажми меня!", // пока при нажатии ничего не происходит! button1 = new Button(); button1.Text = "Нажми меня!"; button1.Top = 100; button1.Left = 100; button1.Height = 50; button1.Width = 70; this.Controls.Add(button1); } static void Main() { // Создаем и запускаем форму Application.Run(new SimpleWindowsFormWithButton()); } }
Листинг
3.4.
Пример программы 3.5
Кнопку на форму мы поместили, но при нажатии на нее ничего не происходит. Это скучно.
Нам нужно описать метод, который будет выполнять какое-либо действие при нажатии на кнопку. Пусть при этом текст в заголовке окна будет меняться. Поскольку такой метод отслеживает наступление некоторого события (в нашем случае – нажатие на кнопку) и затем каким-то образом обрабатывает его, он, напомним, называется «обработчик события». Кроме того, надо привязать обработчик события к соответствующему событию, то есть к нажатию на кнопку.
using System; using System.Windows.Forms; using System.Drawing; class FormWithWorkingButton : Form { Button mrButton; // Метод-конструктор нашего класса public FormWithWorkingButton() { // Указываем заголовок окна this.Text = "Форма с работающей кнопкой!"; // Добавляем кнопку и привязываем ее к обработчику события mrButton = new Button(); mrButton.Text = "Нажми меня"; mrButton.Top = 100; mrButton.Left = 100; mrButton.Height = 50; mrButton.Width = 70; mrButton.Click += new System.EventHandler(mrButton_Click); this.Controls.Add(mrButton); } static void Main() { // Создаем и запускаем форму Application.Run(new FormWithWorkingButton()); } // Обработчик события, срабатывающий при нажатии кнопки void mrButton_Click(object sender, EventArgs e) { // Изменяем текст mrButton.Text = "Кнопка была нажата!"; } }
Листинг
3.5.
Пример программы 3.6
Мы добились успеха: наша программа умеет выполнять основные действия. Теперь добавим на форму несколько новых элементов управления, аккуратно разместим их и немного поработаем с ними. Возьмем элементы управления 4-х типов: Button, ListBox, MessageBox и PictureBox.
Обратите внимание: кроме System.Windows.Forms в этом примере упоминается пространство имен System.Drawing. Дело в том, что мы используем элемент управления PictureBox, а для работы с изображениями требуются классы Drawing.
using System.Windows.Forms; using System.Drawing; class MyForm : Form { // Объявим элемент ListBox как поле класса: // нам придется обращаться к нему из разных методов ListBox listBox1; // Метод-конструктор нашего класса public MyForm() { //Размеры формы this.Size = new Size(400, 400); // Создадим элемент PictureBox, поместим в него изображение, // добавим его на форму PictureBox pictureBox1 = new PictureBox(); pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; Bitmap image1 = new Bitmap ("..//..//images//Zakat.jpg"); pictureBox1.ClientSize = new Size(this.Width, 150); pictureBox1.Image = (Image)image1; this.Controls.Add(pictureBox1); // Создаем объект Button, определяем некоторые из его свойств Button button1 = new System.Windows.Forms.Button(); button1.Location = new Point(150, 160); button1.Size = new Size(100, 30); button1.Text = "Нажми меня"; button1.Click += new System.EventHandler(button1_Click); this.Controls.Add(button1); // Создаем ListBox, определяем свойства и добавляем на форму listBox1 = new System.Windows.Forms.ListBox(); listBox1.Location = new System.Drawing.Point(20, 200); listBox1.Size = new Size(100, 100); listBox1.Items.Add("Лес"); listBox1.Items.Add("Степь "); listBox1.Items.Add("Озеро"); listBox1.Items.Add("Море"); listBox1.Items.Add("Океан"); listBox1.SelectedIndex = 2; this.Controls.Add(listBox1); } // Обработчик события, срабатывающий при нажатии кнопки void button1_Click(object sender, System.EventArgs e) { // Выводим сообщение с указанием выбранного в списке пункта MessageBox.Show(this, "Вы выбрали " + listBox1.SelectedItem, "Уведомление", MessageBoxButtons.OK); } static void Main() { // Создаем и запускаем форму Application.Run(new MyForm()); } private void InitializeComponent() { this.SuspendLayout(); // // MyForm // this.BackColor = System.Drawing.SystemColors.Control; this.ClientSize = new System.Drawing.Size(292, 273); this.Name = "MyForm"; this.ResumeLayout(false); } }
Листинг
3.6.
Калькулятор
Windows Forms на
языке
C#
Оригинал: http://vscode.ru/prog—lessons/kalkulyator—windows—forms—c—shapr.html
Мы создадим более усовершенствованный калькулятор Windows Forms.Итак, выглядеть у нас
он будет вот так:
Здесь у нас 19 кнопок Button, 1 Textbox и ещё 1
пустой Label (на рисунке он выделен). Применение его будет описано ниже. Итак, создаём
такую или похожую форму. Мы увеличили ширину TextBox’a, используяMultiLine:
Также в Свойствах мы увеличили размер шрифта в
TextBox’e и Label’e до 12 пт.
Теперь делаем так, чтобы при нажатии на цифровые
кнопки, в TextBox’e появлялась соответствующая цифра.
Для этого дважды кликаем на кнопке “0” и в
открывшемся коде пишем:
private void button17_Click(object
sender, EventArgs e)
{
textBox1.Text =
textBox1.Text + 0; }
Проверяем, несколько раз нажав на кнопку “0” у нас в
форме.
Работает. Делаем то же самое с остальными цифровыми
кнопками:
private void button13_Click(object
sender, EventArgs e)
{
textBox1.Text =
textBox1.Text + 1;
}
private void button14_Click(object
sender, EventArgs e)
{
textBox1.Text =
textBox1.Text + 2;
}
private void button15_Click(object
sender, EventArgs e)
{
textBox1.Text =
textBox1.Text + 3;
}
private void button9_Click(object
sender, EventArgs e)
{
textBox1.Text =
textBox1.Text + 4;
}
private void button10_Click(object
sender, EventArgs e)
{
textBox1.Text =
textBox1.Text + 5;
}
private void button11_Click(object
sender, EventArgs e)
{
textBox1.Text =
textBox1.Text + 6;
}
private void button5_Click(object
sender, EventArgs e)
{
textBox1.Text =
textBox1.Text + 7;
}
private void button6_Click(object
sender, EventArgs e)
{
textBox1.Text =
textBox1.Text + 8;
}
private void button7_Click(object
sender, EventArgs e)
{
textBox1.Text =
textBox1.Text + 9; }
Таким же образом кликаем дважды на кнопку “.” в
форме. Она будет использоваться для создания десятичной дроби. Пишем следующий
код:
private void button18_Click(object
sender, EventArgs e)
{
textBox1.Text =
textBox1.Text + «,»;
}
Кнопки нажимаются, в TextBox’e
отображаются нажатые цифры. Теперь надо научить программу производить с ними
какие-либо операции. Как видно из формы, наш калькулятор сможет производить
стандартные математические операции: сложение, вычитание, умножение и деление.
Для начала мы создадим в самом начале программы несколько переменных, которые
нам для этого понадобятся:
float a, b; int count; bool znak =
true;
Первым двум переменным будут
присваиваться значения, набранные пользователем в калькуляторе. В последствии с ними будут
производиться нужные математические операции. Тип float – это тип с плавающей точкой,
позволяющий работать с десятичными дробями, что нам, безусловно, нужно
при наличии кнопки “.” . Благодаря второй переменной мы будем давать программе
указания, какую именно операцию производить с переменными, описанными выше.
Здесь нам не нужна дробь, поэтому обойдёмся целочисленным типом int.
Последняя переменная znak нам понадобится для того,
чтобы менять знаки у введённых чисел. Тип bool может иметь два значения – ture
и false. Мы представим, что если znakимеет значение true в программе, то это
означает, что у числа знак +, если false – число отрицательное и перед собой
имеет знак -. Изначально в калькуляторе вбиваются положительные числа, поэтому
мы сразу присвоили переменной значение true. Далее мы дважды нажимаем на кнопку
“+”, обозначающую сложение, на форме и пишем следующий код:
private void button4_Click(object
sender, EventArgs e)
{
a = float.Parse(textBox1.Text);
textBox1.Clear(); count = 1;
label1.Text =
a.ToString() + «+»; znak = true; }
В строке 3 мы присваиваем первой переменной a то, что
будет написано в TextBox’e (а именно число, которое введёт пользователь перед
тем, как нажать кнопку “+”).
Затем TextBox очищается, число, введённое
пользователем, в нём пропадает (но остаётся в переменной a) Переменной count
присваивается число 1, которая потом укажет программе, что именно операцию
сложения надо будет произвести с числами. Затем в Label записывается число из
переменной a (то самое, которое изначально ввёл пользователь) и знак плюса.
Выглядеть в форме это будет так, как описано ниже. Пользователь вводит
какое-либо число:
Затем нажимает на кнопку “+” и после этого видит:
Кроме того, как бы не было странным с первого
взгляда, мы присваиваем переменнойznak значение true, хотя выше, в начале кода,
мы и так присваивали это же значение. Подробнее данную переменную мы опишем
ниже, но смысл в том, что мы присваиваем значение true, когда хотим сделать
введённое число отрицательным, если оно положительно, а значение false, когда
хотим сделать число положительным, если оно отрицательное. Изначально у нас
вводятся положительные числа, сначала первое, потом второе. И если первое число
мы сделаем отрицательным, то значение у znakперейдёт в false и тогда получится,
что второе слагаемое как бы отрицательное (на практике, просто чтобы поставить
перед ним минус, придётся нажать дважды на соответствующую кнопку, чтобы с
false значение перешло в true, а затем обратно с trueв false, и появился знак
минуса).
Подобным образом заполняем код для кнопок “-“, “*” и
“/”:
private void button8_Click(object
sender, EventArgs e)
{
a =
float.Parse(textBox1.Text); textBox1.Clear(); count =
2;
label1.Text =
a.ToString() + «-«;
znak = true;
}
private void button12_Click(object
sender, EventArgs e)
{
a =
float.Parse(textBox1.Text);
textBox1.Clear(); count = 3;
label1.Text =
a.ToString() + «*»;
znak = true;
}
private void button16_Click(object
sender, EventArgs e)
{
a =
float.Parse(textBox1.Text); textBox1.Clear(); count =
4;
label1.Text =
a.ToString() + «/»; znak = true;
}
Разница лишь в значении переменной count и в том,
какой знак добавляется в Label’e.
Далее нам понадобится создать функцию, которая будет
применять нужные нам математические операции к числам. Назовём её calculate. Но
перед этим мы кликнем дважды на кнопку “=” на форме и в коде к ней мы запишем:
private void button19_Click(object
sender, EventArgs e)
{
calculate(); label1.Text = «»; }
То есть, при нажатии пользователем на кнопку “=”, как
раз выполнится наша функция подсчёта calculate, и, заодно, очистится Label, так
как результат мы в будущем коде выведем в TextBox. Теперь-таки создаём нашу
функцию calculate и пишем следующий код:
private void calculate()
{
switch(count) { case 1:
b = a +
float.Parse(textBox1.Text); textBox1.Text = b.ToString();
break; case 2: b = a —
float.Parse(textBox1.Text); textBox1.Text =
b.ToString(); break; case
3: b = a * float.Parse(textBox1.Text);
textBox1.Text = b.ToString(); break; case
4:
b = a /
float.Parse(textBox1.Text); textBox1.Text = b.ToString();
break; default: break;
}
}
Здесь мы используем конструкцию switch-case.
Switch –
это оператор управления. Он может включать в себя несколько case’ов. Case – метки,
от значения которых зависит, какие операции будут
происходить. Строка switch(count) означает, что именно от значения count будет
зависеть, какое действие будет происходить в коде switch’a. Итак, если count=1
(в коде case 1:), то произойдёт следующее:
После того, как пользователь нажал “+”, он,
естественно, должен ввести второе слагаемое, что он и делает по стандартному
сценарию, а затем нажать кнопку “=” (и в ней, как мы помним, как раз выполнится
наша функция).
Как
только кнопка “=” будет нажата, программа сложит число из переменной a с тем
вторым слагаемым, которое записал пользователь в TextBox, и запишет результат в
переменную b (строка 6 кода функции). В строке 7
программа выведет в TextBoxрезультат сложения – переменную b.
Оператор break (строка завершает исполнение кода
switch при выполнении кода метки case 1, так как больше нам в нём делать
нечего.
Точно так же строится алгоритм при case 2, case 3 и
case 4 с той разницей, что в них происходит не сложение, а вычитание, умножение
и деление соответственно.
Оператор default срабатывает, если вдруг что-то
пойдёт не по плану и count примет какое-либо иное значение, не описанное в
switch. Тогда срабатывает лишь операторbreak. Львиная доля программы готова.
Нам надо лишь написать код для трёх оставшихся нетронутыми до этого время
кнопок. Дважды жмём в форме на кнопку “С”. Она будет очищать все записи из
TextBox’a иLabel’a. Код у неё элементарный:
private void button3_Click(object
sender, EventArgs e)
{
textBox1.Text =
«»; label1.Text = «»; }
На очереди у нас кнопка “<–“. Она будет удалять
последнюю цифру записанного вTextBox’e числа. Код:
private void button2_Click(object
sender, EventArgs e)
{
int lenght =
textBox1.Text.Length — 1; string text = textBox1.Text;
textBox1.Clear();
for (int i = 0; i <
lenght; i++)
{
textBox1.Text =
textBox1.Text + text[i];
}
}
Мы вводим новую переменную lenght целочисленного типа
и записываем в неё количество символов в TextBox’e минус один символ. Также мы
вводим новую переменную text, в которую полностью заносим текст из TextBox’а.
Затем мы очищаем TextBox и вводим цикл for, через который записываем в TextBox
строку text, но уже на символ короче. Например, в TextBox’e записано число
504523 При нажатии на кнопку “<–“ в переменную lenght записывается число 5
(6 цифр – 1), в переменную text записывается строка “504523”, TextBox
очищается, а затем в него по одному записываются символы из text, но в этот раз
их будет не 6, а 5, то есть вTextBox’e появится число 50452. У нас остаётся
последняя кнопка, которая отвечает за знак первого слагаемого. Переходим к её
коду. Тут мы будет работать с переменной znak, которую описывали выше. Код
выглядит вот так:
private void button1_Click(object
sender, EventArgs e)
{
if(znak==true)
{
textBox1.Text =
«-» + textBox1.Text;
znak = false;
}
else if
(znak==false)
{
textBox1.Text=textBox1.Text.Replace(«-«,
«»); znak = true;
}
Изначально, как мы помним, у переменной znak стоит значение true. Если
мы нажмём на кнопку первый раз, то в TextBox’e перед числом появится знак
“-“, а переменной znakбудет присвоено значение false.
Если второй раз нажать на данную кнопку, то, так как znak у нас false,
произойдёт второе условие. Здесь используется метод Replace, который заменяет
какой-либо кусок строки на другой. В скобках после метода вначале пишется, что
будет заменено в строке, а после запятой, то, на что заменять. В данном случае мы заменяем
в TextBox’e минус на пустое значение.
Вот и всё, наш калькулятор Windows Forms готов! Можно его
тестировать!