Основные свойства объекта Form
| Name | Имя объекта. По умолчанию - Form1. В программе по имени осуществляется доступ к свойствам объекта. Имя можно изменять. Так же как и для имён переменных, имя объекта должно начинаться с латинской буквы. Дальше могут следовать как буквы, так и цифры. Например: MainForm; Form_2115; F10head. |
| BackColor | Цвет заливки (фон) объекта. |
| Cursor | Вид курсора мыши отображаемого на фоне окна. |
| Font | Свойство Font задаёт тип шрифта - имя, размер, начертание. Шрифт, заданный в форме, переходит на остальные объекты, расположенные на форме (наследование). |
| ForeColor | Цвет отображения (текста) на элементах (визуальных объектах) формы. |
| FormBorderStyle | Тип бордюра (рамки) формы: Sizable - (по умолчанию) размер формы можно изменять в процессе выполнения программы; None - форма не имеет бордюра, строки заголовка и системных кнопок; FixedSingle - бордюр одинарный, размер формы изменять нельзя; Fixed3D - то же, что и FixedSingle, но бордюр объёмный; FixedDialog - то же, что и FixedSingle и предназначена для конструирования диалоговых панелей - не имеет системной кнопки в строке заголовка; FixedToolWindow - окно для изготовления инструментальных панелей, имеет только одну системную кнопку "Закрыть"; SizableToolWindow - то же, что и FixedToolWindow, но размер окна можно изменять. |
| Icon | Рисунок (иконка в формате ico) появляющийся в строке заголовка формы. |
| Opacity | Непрозрачность. Уменьшение процентного показателя ведёт к появлению эффекта прозрачности формы вместе с её содержимым. |
| Size | Размер окна (в пикселях) - ширина; высота. |
| StartPosition | Положение окна при запуске программы: WindowDefaultLocation - окно на экране в позиции по умолчанию; CenterScreen - окно в центре экрана. |
| WindowState | Поведение окна при запуске: normal - нормальное отображение; Minimized - окно минимизировано на панель инструментов Windows; Maximized - окно развёрнуто на весь экран. |
Первое консольное приложение
static void Main(string[] args)
{
Console.WriteLine("Моё консольное приложение");
// Чтобы окно не свернулось, следует написать Console.ReadKey()
Console.ReadKey();
}Простой блокнот
Размещаем в форме RichTextBox и MenuStrip
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Notepad
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void новыйToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Clear();
}
private void открытьToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog op = new OpenFileDialog();
op.Title = "open";
op.Filter = "Text DOcument(*.txt)|*.txt|All Files(*.*)|*.*";
if (op.ShowDialog() == DialogResult.OK)
richTextBox1.LoadFile(op.FileName, RichTextBoxStreamType.PlainText);
this.Text = op.FileName;
}
private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog op = new SaveFileDialog();
op.Title = "Save";
op.Filter = "Text DOcument(*.txt)|*.txt|All Files(*.*)|*.*";
if (op.ShowDialog() == DialogResult.OK)
richTextBox1.SaveFile(op.FileName, RichTextBoxStreamType.PlainText);
this.Text = op.FileName;
}
private void выйтиToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
private void отменитьToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Undo();
}
private void повторитьToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Redo();
}
private void копироватьToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Copy();
}
private void вставитьToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Paste();
}
private void вырезатьToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Cut();
}
private void выделитьВсёToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.SelectAll();
}
private void датаВремяToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Text = System.DateTime.Now.ToString();
}
private void шрифтToolStripMenuItem_Click(object sender, EventArgs e)
{
FontDialog op = new FontDialog();
if (op.ShowDialog() == DialogResult.OK)
richTextBox1.Font = op.Font;
}
private void цветToolStripMenuItem_Click(object sender, EventArgs e)
{
ColorDialog op = new ColorDialog();
if (op.ShowDialog() == DialogResult.OK)
richTextBox1.ForeColor = op.Color;
}
}
}Для вставки даты следует использовать SelectedText, а не Text т.е. по месту расположения курсора, Например:
richTextBox1.SelectedText = DateTime.Now.ToString();
Жирный текст
private void btnBold_Click(object sender, EventArgs e)
{
Font oldFont, newFont;
oldFont = this.rtfText.SelectionFont;
if (oldFont.Bold == true)
// если уже жирный то убираем выделение
newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Bold);
else newFont = new Font(oldFont, oldFont.Style | FontStyle.Bold); // выделяем жирным
this.rtfText.SelectionFont = newFont;
this.rtfText.Focus();
}Наклонный текст
private void btnItalic_Click(object sender, EventArgs e)
{
Font oldFont, newFont;
oldFont = this.rtfText.SelectionFont;
if (oldFont.Italic == true)
newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Italic);
else newFont = new Font(oldFont, oldFont.Style | FontStyle.Italic);
this.rtfText.SelectionFont = newFont;
this.rtfText.Focus();
}Подчёркнутый текст
private void btnUnderline_Click(object sender, EventArgs e)
{
Font oldFont, newFont;
oldFont = this.rtfText.SelectionFont;
if (oldFont.Underline == true)
newFont = new Font(oldFont, oldFont.Style & ~FontStyle.Underline);
else newFont = new Font(oldFont, oldFont.Style | FontStyle.Underline);
this.rtfText.SelectionFont = newFont;
this.rtfText.Focus();
}Текст по центру
private void btnCenter_Click(object sender, EventArgs e)
{
if (this.rtfText.SelectionAlignment == HorizontalAlignment.Center)
this.rtfText.SelectionAlignment = HorizontalAlignment.Left;
else this.rtfText.SelectionAlignment = HorizontalAlignment.Center;
this.rtfText.Focus();
}Простой просмотрщик/конвертер изображений
Размещаем в форме MenuStrip с пунктами: Файл, Открыть, Сохранить как, Выйти и PictureBox.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ImageViewer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void открытьToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "jpg (*.jpg)|*.jpg|bmp (*.bmp)|*.bmp|png (*.png)|*.png|gif (*.gif)|*.gif";
if (ofd.ShowDialog() == DialogResult.OK && ofd.FileName.Length > 0)
{
pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
pictureBox1.Image = Image.FromFile(ofd.FileName);
}
}
private void сохранитьКакToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "jpg (*.jpg)|*.jpg|bmp (*.bmp)|*.bmp|png (*.png)|*.png|gif (*.gif)|*.gif";
if (sfd.ShowDialog() == DialogResult.OK && sfd.FileName.Length > 0)
{
pictureBox1.Image.Save(sfd.FileName);
}
}
private void выйтиToolStripMenuItem_Click_1(object sender, EventArgs e)
{
Application.Exit();
}
}
}Чтобы сделать форму поверх всех окон, установите свойство формы TopMost = True.
TopMost = true;
Пример с чекбоксом:
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
TopMost = true;
}Пример для формы:
public Form1()
{
TopMost = true;
InitializeComponent();
}Копировать в буфер обмена
Clipboard.SetText(textBox2.Text);
Вызов второй формы (NonModalForm)
NonModalForm childForm = new NonModalForm();
childForm.Show();Смена регистра
Смена регистра
Метод String.ToUpper переводит все символы в строке в верхний регистр. В следующем примере смешанный регистр строки "Hello World!" изменяется на верхний:
string properString = "Hello World!"; Console.WriteLine(properString.ToUpper()); // Этот пример показывает следующий вывод: // HELLO WORLD!
Метод String.ToLower похож на предыдущий метод, но преобразует регистр всех знаков в строке в нижний. В следующем примере регистр строки "Hello World!" заменяется на нижний:
// Этот пример показывает следующий вывод: // hello world!
Таймер
MessageBox.Show("Сообщение 1");
System.Threading.Thread.Sleep(2000);
MessageBox.Show("Сообщение 2 с интервалом в 2 сек.");Чтение и запись в файл (сохранение)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string[] str;
private void Form1_Load(object sender, EventArgs e)
{
try
{
str = File.ReadAllLines("test.txt");
textBox1.Text = str[0];
textBox2.Text = str[1];
}
catch (Exception)
{ }
}
private void button1_Click(object sender, EventArgs e)
{
StreamWriter sw = new StreamWriter("test.txt");
sw.WriteLine(textBox1.Text);
sw.WriteLine(textBox2.Text);
sw.Close();
}
}
}Очистить поля во всех TextBox
foreach (Control c in this.Controls)
{
if(c.GetType() == typeof(TextBox))
c.Text = "";
}MessageBox
MessageBox.Show("Название \nCopyright © Автор", "Заголовок", MessageBoxButtons.OK, MessageBoxIcon.Information);или так:
string caption = "Заголовок окна";
string message = "Текст";
DialogResult result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.No)
{
return;
}Плавное закрытие формы
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
for (; Opacity > 0; Opacity -= .01, System.Threading.Thread.Sleep(10)) ;
}Свойство CharacterCasing
// Только прописные textBox1.CharacterCasing = CharacterCasing.Lower;
Деактивировать поле
textBox1.Enabled = false; // можно выделять, копировать, перемещать курсор: textBox1.ReadOnly = true;
Подсказки в StatusStrip при наведении на элементы
На форме размещаем StatusStrip и выбираем StatusLabel.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace tooltips
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// Очищаем toolStripStatusLabel1 (или просто убрать текст)
toolStripStatusLabel1.Text = String.Empty;
}
// В свойствах toolStripStatusLabel1 SizingGrip ставим False для того, чтобы убрать уголок
private void textBox1_MouseEnter(object sender, EventArgs e)
{
// При наведении
toolStripStatusLabel1.Text = "Подсказка";
}
private void textBox1_MouseLeave(object sender, EventArgs e)
{
// Очищаем при отведении
toolStripStatusLabel1.Text = String.Empty;
// или
// toolStripStatusLabel1.Text = "";
}
}
}Anchor (Перечисления)
button1.Anchor = (AnchorStyles.Bottom | AnchorStyles.Right);
Font
textBox1.Font = new Font ("Giorgia", 11, FontStyle.Italic);Size
textBox1.Size = new Size(261, 112);
Multiline
textBox1.Multiline = true;
MaximizeBox и FormBorderStyle
private void Form1_Load(object sender, EventArgs e)
{
this.MaximizeBox = false;
this.FormBorderStyle = FormBorderStyle.FixedSingle;
}Неактивный элемент
btn.Enabled = false;
Убрать рамку у кнопки
button1.FlatAppearance.BorderSize = 0; button1.FlatStyle = FlatStyle.Flat;
Или так:
button1.FlatStyle = FlatStyle.Flat; button1.FlatAppearance.MouseDownBackColor = SystemColors.Control; button1.FlatAppearance.MouseOverBackColor = SystemColors.Control; button1.FlatAppearance.BorderColor = SystemColors.Control;
Или, если используется Button, в свойствах FlatStyle = Flat, затем FlatAppearance → BorderSize = 0.
Изменить программно курсор
button1.Cursor = System.Windows.Forms.Cursors.Hand;
Открыть изображение
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
System.IO.FileStream fs = new System.IO.FileStream(openFileDialog1.FileName, System.IO.FileMode.Open);
System.Drawing.Image img = System.Drawing.Image.FromStream(fs);
fs.Close();
pictureBox1.Image = img;
}Прозрачный фон формы
this.FormBorderStyle = FormBorderStyle.None; this.AllowTransparency = true; this.BackColor = Color.AliceBlue;//цвет фона this.TransparencyKey = this.BackColor;//он же будет заменен на прозрачный цвет
То же самое можно сделать и из конструктора
Фоновое изображение программно
this.BackgroundImage = Image.FromFile("123.png");//фонPadding у textBox
Чтобы установить padding у textBox, можно сначала на форме разместить panel одного цвета с textBox, а затем на panel разместить textBox с нужным отступом.
Вариант второй:
Сделайте границу RichTextBox'а невидимой:
richTextBox1.BorderStyle = BorderStyle.None;
и создайте рамку вокруг него, которая будет немного шире, что будет выглядеть как отступ:
panel1.Margin = new Padding(10, 0, 0, 0); // отступ слева в 10px panel1.BorderStyle = BorderStyle.FixedSingle;
Перемещение формы мышкой, если FormBorderStyle = None
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication53
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
this.MouseDown += new MouseEventHandler(Form1_MouseDown);
}
void Form1_MouseDown(object sender, MouseEventArgs e)
{
base.Capture = false;
Message m = Message.Create(base.Handle, 0xa1, new IntPtr(2), IntPtr.Zero);
this.WndProc(ref m);
}
}
}Или так:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication61
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Panel panel = new Panel();
panel.BackColor = Color.Red;
panel.Size = new Size(50, 50);
this.Controls.Add(panel);
panel.MouseDown += new MouseEventHandler(panel_MouseDown);
}
void panel_MouseDown(object sender, MouseEventArgs e)
{
Panel panel = sender as Panel;
panel.Capture = false;
Message m = Message.Create(panel.Handle, 0xa1, new IntPtr(2), IntPtr.Zero);
this.WndProc(ref m);
}
}
}Или так:
using System.Runtime.InteropServices;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("user32", CharSet = CharSet.Auto)]
internal extern static bool PostMessage(IntPtr hWnd, uint Msg, uint WParam, uint LParam);
[DllImport("user32", CharSet = CharSet.Auto)]
internal extern static bool ReleaseCapture();
const uint WM_SYSCOMMAND = 0x0112;
const uint DOMOVE = 0xF012;
const uint DOSIZE = 0xF008;
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
ReleaseCapture();
PostMessage(panel1.Handle, WM_SYSCOMMAND, DOMOVE, 0);
}Или так:
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication53
{
public partial class Form1 : Form
{
[DllImport("user32", CharSet = CharSet.Auto)]
internal extern static bool PostMessage(IntPtr hWnd, uint Msg, uint WParam, uint LParam);
[DllImport("user32", CharSet = CharSet.Auto)]
internal extern static bool ReleaseCapture();
const uint WM_SYSCOMMAND = 0x0112;
const uint DOMOVE = 0xF012;
const uint DOSIZE = 0xF008;
public Form1()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
this.MouseDown += new MouseEventHandler(Form1_MouseDown);
}
void Form1_MouseDown(object sender, MouseEventArgs e)
{
ReleaseCapture();
PostMessage(this.Handle, WM_SYSCOMMAND, DOMOVE, 0);
}
}
}Или так:
public partial class Form1 : Form
{
//Координаты мышки
private int x = 0; private int y = 0;
// Нажатие кнопки мышки
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
x = e.X; y = e.Y;
}
// Движение мышки
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
this.Location = new System.Drawing.Point(this.Location.X + (e.X - x), this.Location.Y + (e.Y - y));
}
}
}Или так:
private void TestForms_MouseDown(object sender, MouseEventArgs e)
{
mouse_offset = new Point(-e.X, -e.Y);
}
private void TestForms_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouse_offset.X, mouse_offset.Y);
Location = mousePos;
}
}Поиск в richbox
private void button2_Click(object sender, EventArgs e)
{
string str = richTextBox1.Text;
if (String.IsNullOrEmpty(str) || String.IsNullOrEmpty(textBox1.Text))
{
MessageBox.Show("Введите что-нибудь!");
}
else
{
if (str.IndexOf(textBox1.Text) != -1)
{
MessageBox.Show("Найдено!");
}
else
{
MessageBox.Show("Не обнаружено!");
}
}
}Поиск в ListBox (без учёта регистра)
private void button1_Click(object sender, EventArgs e)
{
listBox1.SelectedItems.Clear();
for (int i = listBox1.Items.Count -1; i >= 0;i-- )
{
if (listBox1.Items[i].ToString().ToLower().Contains(txt_search.Text.ToLower()))
{
listBox1.SetSelected(i, true);
}
label_status.Text = listBox1.SelectedItems.Count.ToString() + " элементов найдено";
}
}Для множественного поиска в свойствах listBox выбрать SelectionMode → MultiSimple
Поиск и выделение
private void textBox1_TextChanged(object sender, EventArgs e)
{
int index = 0;
string temp = richTextBox1.Text;
richTextBox1.Text = "";
richTextBox1.Text = temp;
while (index < richTextBox1.Text.LastIndexOf(textBox1.Text))
{
// Searches the text in a RichTextBox control for a string within a range of text withing the control and with specific options applied to the search.
richTextBox1.Find(textBox1.Text, index, richTextBox1.TextLength, RichTextBoxFinds.None);
// Selection Color. This is added automatically when a match is found.
richTextBox1.SelectionBackColor = Color.Yellow;
// After a match is found the index is increased so the search won't stop at the same match again. This makes possible to highlight same words at the same time.
index = richTextBox1.Text.IndexOf(textBox1.Text, index) + 1;
}
}Запрет первого пробела
if (txtValue.Text.Length == 0)
e.Handled = e.KeyChar == ' ';Минимизировать
this.WindowState = FormWindowState.Minimized;
Запуск внешних программ
// run notepad
System.Diagnostics.Process.Start("notepad.exe");
//run calculator
System.Diagnostics.Process.Start("calc.exe");Если были изменения в richTextBox1 - спросить что делать при попытке закрытия формы
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (richTextBox1.Modified == false) return;
//Если текст модифицирован, спросить записать ли файл.
DialogResult MBox = MessageBox.Show(
"Текст был изменён. \nСохранить изменения?",
"Редактор", MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Exclamation);
//Yes - диалог; No - выход; Cancel - редактировать
if (MBox == DialogResult.No) return;
if (MBox == DialogResult.Cancel) e.Cancel = true;
if (MBox == DialogResult.Yes)
{
if (richTextBox1.TextLength > 0)
{
File.WriteAllText(fileName, richTextBox1.Text);
}
else e.Cancel = true;
}
}Escape в Menustrip
menuStripItem.ShortcutKeyDisplayString = "ESC";
Как сделать, чтобы textbox раскрывался вместе с формой
Поместить на форму панель, закрепить её в родительском контейнере, пометить на панель textbox. Форме задать SizeChanget и написать следующий код:
textBox1.Width = panel1.Width; textBox1.Height = panel1.Height;
Сохранение файла в Мои документы
SaveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); SaveFileDialog.RestoreDirectory = true;
Постепенное появление формы
- Задать форме Opacity: 0%.
- Добавить Timer и задать Interval: 30.
public Form1()
{
InitializeComponent();
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
this.Opacity += .05;
if(this.Opacity == 1)
{
timer1.Stop();
}
}Использование метода Compare()
private void Form1_Load(object sender, EventArgs e)
{
string str1 = "один";
string str2 = "один";
string str3 = "ОДИН";
string str4 = "два";
string str5 = "один, два";
if (String.Compare(str1, str2) == 0)
label1.Text = (str1 + " и " + str2 + " равны.");
else
label1.Text = (str1 + " и " + str2 + " не равны.");
if (String.Compare(str1, str3) == 0)
label2.Text = (str1 + " и " + str3 + " равны.");
else
label2.Text = (str1 + " и " + str3 + " не равны.");
if (String.Compare(str1, str3, true) == 0)
label3.Text = (str1 + " и " + str3 +
" равны без учета регистра.");
else
label3.Text = (str1 + " и " + str3 +
" не равны без учета регистра.");
if (String.Compare(str1, str5) == 0)
label4.Text = (str1 + " и " + str5 + " равны.");
else
label4.Text = (str1 + " и " + str5 + " не равны.");
if (String.Compare(str1, 0, str5, 0, 3) == 0)
label5.Text = ("Первая часть строки " + str1 + " и " +
str5 + " равны.");
else
label5.Text = ("Первая часть строки " + str1 + " и " +
str5 + " не равны.");
int result = String.Compare(str1, str4);
if (result < 0)
label6.Text = (str1 + " меньше " + str4);
else if (result > 0)
label6.Text = (str1 + " больше " + str4);
else
label6.Text = (str1 + " равно " + str4);
}if ((String.Compare(textBox1.Text, "ЕЛЕНА", true) == 0) && (String.Compare(textBox2.Text, "СИДЕЛЬНИКОВА", true) == 0))
{
Form fm = new Form2();
fm.ShowDialog();
}Свойство ListBox.SelectedItem
private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
// Get the currently selected item in the ListBox.
string curItem = listBox1.SelectedItem.ToString();
// Find the string in ListBox2.
int index = listBox2.FindString(curItem);
// If the item was not found in ListBox 2 display a message box, otherwise select it in ListBox2.
if(index == -1)
MessageBox.Show("Item is not available in ListBox2");
else
listBox2.SetSelected(index,true);
}Сохранение настроек - положение окна, размер окна, максимизировать
В настройках:
- Name: F1State | Type: System.Windows.Forms.FormWindowState | Value: Normal
- Name: F1Location | Type: System.Drawing.Point | Value: 0;0
- Name: F1Size | Type: System.Drawing.Size | Value: 0;0
private void Form1_Load(object sender, EventArgs e)
{
this.WindowState = Properties.Settings.Default.F1State;
this.Location = Properties.Settings.Default.F1Location;
this.Size = Properties.Settings.Default.F1Size;
if (Properties.Settings.Default.F1Size.Width == 0 || Properties.Settings.Default.F1Size.Height == 0)
{
// first start
// optional: add default values
}
else
{
this.WindowState = Properties.Settings.Default.F1State;
// we don't want a minimized window at startup
if (this.WindowState == FormWindowState.Minimized) this.WindowState = FormWindowState.Normal;
this.Location = Properties.Settings.Default.F1Location;
this.Size = Properties.Settings.Default.F1Size;
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Properties.Settings.Default.F1State = this.WindowState;
if (this.WindowState == FormWindowState.Normal)
{
// save location and size if the state is normal
Properties.Settings.Default.F1Location = this.Location;
Properties.Settings.Default.F1Size = this.Size;
}
else
{
// save the RestoreBounds if the form is minimized or maximized!
Properties.Settings.Default.F1Location = this.RestoreBounds.Location;
Properties.Settings.Default.F1Size = this.RestoreBounds.Size;
}
// don't forget to save the settings
Properties.Settings.Default.Save();
}В реестре
using Microsoft.Win32;
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
RegistryKey key = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\WinRegistry");
key.SetValue("Width", this.Width);
key.SetValue("Height", this.Height);
key.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\WinRegistry");
if (key != null)
{
int width = int.Parse(key.GetValue("Width").ToString());
int height = int.Parse(key.GetValue("Height").ToString());
this.Size = new Size(width, height);
}
}Создание каталога и подкаталога
string path = @"C:\SomeDir";
string subpath = @"program\avalon";
DirectoryInfo dirInfo = new DirectoryInfo(path);
if (!dirInfo.Exists)
{
dirInfo.Create();
}
dirInfo.CreateSubdirectory(subpath);Удаление каталога
string dirName = @"C:\SomeDir";
try
{
DirectoryInfo dirInfo = new DirectoryInfo(dirName);
dirInfo.Delete(true);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}или так:
string dirName = @"C:\SomeDir";
Directory.Delete(dirName, true);Копировать файл
string path = @"C:\apache\hta.txt";
string newPath = @"C:\SomeDir\hta.txt";
FileInfo fileInf = new FileInfo(path);
if (fileInf.Exists)
{
fileInf.CopyTo(newPath, true);
// альтернатива с помощью класса File
// File.Copy(path, newPath, true);
}Копировать файл на рабочий стол
string path = @"C:\sample.txt";
//string newPath = @"C:\SomeDir\sample.txt";
string newPath = (Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\sample.txt");
FileInfo fileInf = new FileInfo(path);
if (fileInf.Exists)
{
fileInf.CopyTo(newPath, true);
// альтернатива с помощью класса File
// File.Copy(path, newPath, true);
}Копировать файл на рабочий стол из директории программы
//string path = @"C:\sample.txt";
//string newPath = @"C:\SomeDir\sample.txt";
string path = ((AppDomain.CurrentDomain.BaseDirectory) + @"\sample.txt");
string newPath = (Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\sample.txt");
FileInfo fileInf = new FileInfo(path);
if (fileInf.Exists)
{
fileInf.CopyTo(newPath, true);
// альтернатива с помощью класса File
// File.Copy(path, newPath, true);
}string path = @"C:\apache\hta.txt";
string newPath = @"C:\SomeDir\hta.txt";
FileInfo fileInf = new FileInfo(path);
if (fileInf.Exists)
{
fileInf.MoveTo(newPath);
// альтернатива с помощью класса File
// File.Move(path, newPath);
}Переместить файл
Удалить файл
string path = @"C:\apache\hta.txt";
FileInfo fileInf = new FileInfo(path);
if (fileInf.Exists)
{
fileInf.Delete();
// альтернатива с помощью класса File
// File.Delete(path);
}Открыть директорию программы
OpenFileDialog dialog = new OpenFileDialog(); dialog.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory; dialog.ShowDialog();
Копировать в директорию программы через OpenFileDialog
OpenFileDialog filedialog = new OpenFileDialog();
filedialog.Filter = ("(*.wav)|*.*");
if (filedialog.ShowDialog() == DialogResult.OK)
{
if (filedialog.OpenFile() != null)
{
string fileName = filedialog.SafeFileName; //Получили имя файла
string sourcePath = filedialog.FileName; //Получили абсолютный путь
string targetPath = @"Music";
string destFile = System.IO.Path.Combine(targetPath, fileName); // \Music\<fileName>
System.IO.File.Copy(sourcePath, destFile, true); //Копируем выбранный в OpenFileDialog файл в корень программы, в папку Music
}
}или в корень:
OpenFileDialog filedialog = new OpenFileDialog();
filedialog.Filter = ("(*.wav)|*.*");
if (filedialog.ShowDialog() == DialogResult.OK)
{
if (filedialog.OpenFile() != null)
{
string fileName = filedialog.SafeFileName; //Получили имя файла
string sourcePath = filedialog.FileName; //Получили абсолютный путь
string destFile = System.IO.Path.Combine(fileName); // \Music\<fileName>
System.IO.File.Copy(sourcePath, destFile, true); //Копируем выбранный в OpenFileDialog файл в корень программы, в папку Music
}
}C выводом в listBox и проверкой:
using System.Diagnostics;
OpenFileDialog filedialog = new OpenFileDialog();
filedialog.Filter = ("(*.wav)|*.*");
if (filedialog.ShowDialog() == DialogResult.OK)
{
string fileName = filedialog.SafeFileName;
string sourcePath = filedialog.FileName;
string targetPath = @"Music";
listBox1.Items.Add("Копируемый файл: " + sourcePath); // Проверка путей
if (!Directory.Exists(targetPath)) //Если папки нет...
Directory.CreateDirectory(targetPath); //...создадим ее
string destFile = Path.Combine(targetPath, fileName);
listBox1.Items.Add("Целевая папка: " + destFile); // Проверка путей
File.Copy(sourcePath, destFile, true);
Process.Start(targetPath); // ...открываем папку Music
}Что-то вроде резервной копии
SaveFileDialog sfd = new SaveFileDialog();
sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
sfd.RestoreDirectory = true;
sfd.FileName = "sample";
sfd.Filter = "Текстовой файл (*.txt)|*.txt";
if (sfd.ShowDialog() == DialogResult.OK)
{
string path = ((AppDomain.CurrentDomain.BaseDirectory) + @"\sample.txt");
string newPath = sfd.FileName;
FileInfo fileInf = new FileInfo(path);
if (fileInf.Exists)
{
fileInf.CopyTo(newPath, true);
}
MessageBox.Show("Резервная копия создана успешно!");
}Поиск в Google
string searchString = "Turtle";
System.Diagnostics.Process.Start("www.google.com/search?q=" + searchString);Обработчик для контекстного меню
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
cut2.Enabled = copy2.Enabled = richTextBox1.SelectionLength > 0;
paste2.Enabled =
Clipboard.GetDataObject().GetDataPresent(typeof(string));
}Запустить .exe
using System.Diagnostics;
Process myProc = new Process(); myProc.StartInfo.FileName = "C:\\program.exe"; myProc.Start();
Сохранить настройки состояния чекбокса
Свойства проекта → Параметры:
| Имя | Тип | Область |
| chBox | bool | Пользователь |
private void Form1_Load(object sender, EventArgs e)
{
checkBox1.Checked = Properties.Settings.Default.chBox;
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Properties.Settings.Default.chBox = checkBox1.Checked;
Properties.Settings.Default.Save();
}Поверх всех окон:
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
TopMost = true;
}А лучше так:
if(checkBox1.Checked == true)
{
this.TopMost = true;
}
else
{
this.TopMost = false;
}Примеры Switch
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
switch (comboBox1.SelectedIndex)
{
case 0:
textBox1.Font = new Font("Arial", 8);
break;
case 1:
textBox1.Font = new Font("Arial", 15);
break;
}
}private void textBox1_TextChanged(object sender, EventArgs e)
{
switch (textBox1.Text)
{
case "слово1":
textBox2.Text = "Значение1";
break;
case "слово2":
textBox2.Text = "Значение2";
break;
default:
textBox2.Text = "Слово не найдено!";
break;
}
}Для приведения к нижнему регистру:
textBox1.CharacterCasing = CharacterCasing.Lower;
Вариант сохранения настроек размера шрифта с помощью comboBox
| Имя | Тип | Область | Значение |
| Font | System.Drawing.Font | Пользователь | Arial; 8,25pt |
| comb | string | Пользователь |
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
switch (comboBox1.SelectedIndex)
{
case 0:
textBox1.Font = new Font("Arial", 8);
break;
case 1:
textBox1.Font = new Font("Arial", 15);
break;
}
}
private void Form1_Load(object sender, EventArgs e)
{
//comboBox1.Text = "8";
textBox1.Font = Properties.Settings.Default.Font;
comboBox1.Text = Properties.Settings.Default.comb;
Properties.Settings.Default.Save();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Properties.Settings.Default.Font = textBox1.Font;
Properties.Settings.Default.comb = comboBox1.Text;
Properties.Settings.Default.Save();
}Вторая форма TopMost (формы независимы)
private void button1_Click(object sender, EventArgs e)
{
About topMostForm = new About();
topMostForm.TopMost = true;
topMostForm.Show();
}Вторая форма TopMost (формы зависимы)
private void button1_Click(object sender, EventArgs e)
{
About topMostForm = new About();
topMostForm.TopMost = true;
topMostForm.ShowDialog();
}Добавить пункт в MenuStrip с чекбоксом TopMost
В Form1.Designer.cs дописать к созданному пункту:
this.TopMostToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem() { Checked = false, CheckOnClick = true };
this.TopMostToolStripMenuItem.CheckedChanged += menuItem_CheckedChanged;В Form1.cs:
void menuItem_CheckedChanged(object sender, EventArgs e)
{
ToolStripMenuItem menuItem = sender as ToolStripMenuItem;
if (menuItem.CheckState == CheckState.Checked)
this.TopMost = true;
else if (menuItem.CheckState == CheckState.Unchecked)
this.TopMost = false;
}Если есть вторая форма, то её вызов:
private void button1_Click(object sender, EventArgs e)
{
//About ab = new About();
//ab.ShowDialog();
About topMostForm = new About();
topMostForm.TopMost = true;
topMostForm.ShowDialog();
}DataGridView сортировка
this.dataGridView1.Sort(this.dataGridView1.Columns["Name"],ListSortDirection.Ascending);
Или то же самое (в скобках - номер колонки, где первая колонка 0):
this.dataGridView1.Sort(dataGridView1.Columns[1], ListSortDirection.Ascending);
Запретить сортировку в dataGridView
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
column.SortMode = DataGridViewColumnSortMode.NotSortable;
}Запретить изменение размера ячеек пользователем в dataGridView
dataGridView1.AllowUserToResizeRows = false;
Выделить всю строку в dataGridView
grdExchangeRate.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect;
Скрыть колонки dataGridView
this.dataGridViewName.Columns[3].Visible = false; или this.dataGridViewName.Columns["column_name"].Visible = false;
А также без данных (слева):
this.dataGridViewName.RowHeadersVisible=false;
Текущая ячейка dataGridView - в переменную
string s = dataGridView1.CurrentCell.Value.Tostring();
В Label:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
string s = dataGridView1.CurrentCell.Value.ToString();
label1.Text = s;
}В заголовок формы:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
string s = dataGridView1.CurrentCell.Value.ToString();
this.Text = s;
}Подсчёт строк в dataGridView
label1.Text = "Всего строк: " + Convert.ToString(dataGridView1.Rows.Count);
Или так:
int noOfRows = dataGridView1.RowCount; MessageBox.Show(noOfRows.ToString());
Или так:
lbl_row.Text = dataGridView1.RowCount.ToString();
Подсчёт строк в listBox
label1.Text = listBox1.Items.Count.ToString();
Контекстное меню "Копировать" в dataGridView
- Добавляете на форму ContextMenuStrip, добавляете пункт Копировать
- Выбираете добавленный ContextMenuStrip для DataGridView в окне свойств (свойство ContextMenuStrip)
- Двойным по пункту Копировать создаете обработчик щелчка по пункту меню
- В обработчик добавляете код:
if (dataGridView1.GetCellCount(DataGridViewElementStates.Selected) > 0)
{
try
{
Clipboard.SetDataObject(dataGridView1.GetClipboardContent());
}
catch (System.Runtime.InteropServices.ExternalException)
{
MessageBox.Show("Копирование невозможно");
}
}Контекстное меню "Копировать" в ListBox
- Двойным по пункту Копировать создать обработчик щелчка по пункту меню
- В обработчик добавить код:
private void копироватьToolStripMenuItem_Click(object sender, EventArgs e)
{
Clipboard.SetText(listBox1.SelectedItem.ToString());
}Диалог закрытия формы
//-----------------------------------------------------------
// запрашивает у пользователя подтверждение на выход,
// Возвращает истину, если подтверждается
private bool AskConfirmQuitAppli()
{
// Сообщения подтверждения выхода из приложения
if(MessageBox.Show("Выйти из приложения?",
"Сообщение подтверждения" ,
MessageBoxButtons.YesNo) == DialogResult.No)
// нет
return false;
// да, остаться
return true;
}
//-----------------------------------------------------------
// события вызванное Close ()
// Затем инициирует событие Closed, если не будет отменено
private void MainForm_Closing(
object sender, System.ComponentModel.CancelEventArgs e)
{
//нет подтверждения, действие аннулируется, событие Closed не срабатывает
if(AskConfirmQuitAppli()==false)
e.Cancel= true;
}
//-----------------------------------------------------------
// кнопка Закрыть
private void button1_Click(object sender, System.EventArgs e)
{
// вызывает закрытие (запрос на подтверждение)
Close();
}
//-----------------------------------------------------------
// меню закрыть
private void menuItem3_Click(object sender, System.EventArgs e)
{
// вызывает закрытие (запрос на подтверждение)
Close();
}Rollover эффект
private void pictureBox1_MouseEnter(object sender, EventArgs e)
{
((PictureBox)sender).ImageLocation = "Resources/logo.png";
}
private void pictureBox1_MouseLeave(object sender, EventArgs e)
{
((PictureBox)sender).ImageLocation = "Resources/logoonly.png";
}Или так:
Bitmap image1 = new Bitmap(Environment.CurrentDirectory + @"\image\" + "button_hover.png");
Bitmap image2 = new Bitmap(Environment.CurrentDirectory + @"\image\" + "button.png");
private void pictureBox1_MouseHover(object sender, EventArgs e)
{
pictureBox1.Image = image1;
}
private void pictureBox1_MouseLeave(object sender, EventArgs e)
{
pictureBox1.Image = image2;
}Запуск программы с правами администратора
Файл Program.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Security.Principal;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator);
if (hasAdministrativeRight == false)
{
ProcessStartInfo processInfo = new ProcessStartInfo(); //создаем новый процесс
processInfo.Verb = "runas"; //в данном случае указываем, что процесс должен быть запущен с правами администратора
processInfo.FileName = Application.ExecutablePath; //указываем исполняемый файл (программу) для запуска
try
{
Process.Start(processInfo); //пытаемся запустить процесс
}
catch (Win32Exception)
{
//Ничего не делаем, потому что пользователь, возможно, нажал кнопку "Нет" в ответ на вопрос о запуске программы в окне предупреждения UAC (для Windows 7)
}
Application.Exit(); //закрываем текущую копию программы (в любом случае, даже если пользователь отменил запуск с правами администратора в окне UAC)
}
else //имеем права администратора, значит, стартуем
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}Добавление в автозагрузку
Это пример. Не стоит злоупотреблять добавлением программ в автозагрузку.
private void button1_Click(object sender, EventArgs e)
{
//string ExePath = Application.ExecutablePath; //Возвращает путь исполняемого файла, запустившего приложение, включая имя исполняемого файла.
string ExePath = @"C:\program\program.exe"; // Или конкретная программа
RegistryKey reg;
string name = "Программа";
reg = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run\\");//Здесь переходим по реестру
try
{
reg.SetValue(name, ExePath); //устанавливаем значение
reg.Close(); //сохраняем изменения
}
catch
{
}
}Удаление из автозагрузки
private void button3_Click(object sender, EventArgs e)
{
//string path = Application.ExecutablePath; //Возвращает путь исполняемого файла, запустившего приложение, включая имя исполняемого файла.
string path = "D:\\Projects\\Radio\\Radio\\bin\\Debug\\Radio.exe"; // Или конкретная программа
RegistryKey reg = Registry.CurrentUser.OpenSubKey(@"Software\\Microsoft\\Windows\\CurrentVersion\\Run\\", true);
if (reg != null)
foreach (string valueName in reg.GetValueNames())
{
if (reg.GetValue(valueName).ToString().StartsWith(path))
{ reg.DeleteValue(valueName); break; }
}
}Показать значение trackBar
private void trackBar1_Scroll(object sender, EventArgs e)
{
// При перемещении ползунка будет показано значение в заголовке окна.
this.Text = "Value: " + trackBar1.Value;
}