Разделы презентаций


Язык С #

Содержание

Способы создания приложения WindowsВручную и откомпилировать csc.exeWinDes.exe из .NET SDKVisual Studio.NET

Слайды и текст этой презентации

Слайд 1Язык С#
Построение оконных приложений
Лекция #7

Язык С#Построение оконных приложений Лекция #7

Слайд 2Способы создания приложения Windows
Вручную и откомпилировать csc.exe
WinDes.exe из .NET SDK
Visual

Studio.NET

Способы создания приложения WindowsВручную и откомпилировать csc.exeWinDes.exe из .NET SDKVisual Studio.NET

Слайд 3Обзор пространства имен Windows.Forms

Обзор пространства имен Windows.Forms

Слайд 4Создание главного окна приложения
namespace MyRawWindow
{
using System;
using System.Windows.Forms;

public class MainWindow :

Form
{
public MainWindow(){}

// Запускаем приложение
public static int Main (string[] args)
{
Application.Run(new MainWindow());
return

0;
}
}
}
Создание главного окна приложенияnamespace MyRawWindow{using System;using System.Windows.Forms;public class MainWindow : Form{		public MainWindow(){}		// Запускаем приложение		public static int Main

Слайд 5Визуальная разработка

Визуальная разработка

Слайд 6Фрагмент кода
public class Form1 : System.Windows.Forms.Form
{
private System.ComponentModel.Container components = null;

public

Form1()
{
InitializeComponent();
// TODO here
}

protected override void Dispose( bool disposing )
{ //

Если удалять что-то, то здесь
if( disposing )
{ if (components != null) { components.Dispose(); }
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
private void InitializeComponent()
{ this.components = new System.ComponentModel.Container();
this.Size = new System.Drawing.Size(300,300);
this.Text = "Form1";
}
#endregion

[STAThread]
static void Main()
{
Application.Run(new Form1());
}
}
Фрагмент кодаpublic class Form1 : System.Windows.Forms.Form	{		private System.ComponentModel.Container components = null;		public Form1()		{			InitializeComponent();			// TODO here		}		protected override void Dispose( bool

Слайд 7Методы объекта Application

Методы объекта Application

Слайд 8Свойства объекта Application

Свойства объекта Application

Слайд 9События объекта Application

События объекта Application

Слайд 10Добавление атрибутов в файл AssemblyInfo.cs
// Атрибуты для нашей сборки
[assembly:AssemblyCompany("Intertech, Inc.")]
[assembly:AssemblyProduct("A

Better Window")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

Добавление атрибутов в файл AssemblyInfo.cs// Атрибуты для нашей сборки[assembly:AssemblyCompany(

Слайд 11Работа с классом Application
namespace AppClassExample
{
using System;
using System.Windows.Forms;
using System.Reflection;

public class MainForm

: Form
{
...
public MainForm()
{
GetStats();
}

private void GetStats()
{
MessageBox.Show(Application.CompanyName, "Company:");
MessageBox.Show(Application.ProductName, "App Name:");
MessageBox.Show(Application.StartupPath, "I live

here:");
}
}
}

Работа с классом Applicationnamespace AppClassExample{using System;using System.Windows.Forms;using System.Reflection;public class MainForm : Form{	...	public MainForm()	{		GetStats();	}	private void GetStats()	{		MessageBox.Show(Application.CompanyName,

Слайд 12Реагируем на событие ApplicationExit
public class MainForm : Form
{
...
public

MainForm()
{
...
// Перехватываем событие ApplicationExit
Application.ApplicationExit += new EventHandler(Form_OnExit);
}

// Метод, запускаемый обработчиком событий
private void Form_OnExit(object sender, EventArgs evArgs)
{
MessageBox.Show("See ya!", "This app is dead...");
}
}

// Формат делегата EventHandler
public delegate void EventHandler(object sender, EventArgs evArgs)

Реагируем на событие ApplicationExitpublic class MainForm : Form{ ... public MainForm() {	... 	// Перехватываем событие ApplicationExit	Application.ApplicationExit +=

Слайд 13Препроцессинг сообщений
// Мы должны указать это пространство имен!
using Microsoft.Win32;

// Создаем

класс — фильтр сообщений
public class MyMessageFilter : IMessageFilter
{
public bool PreFilterMessage(ref

Message m)
{
// Перехватываем нажатие правой кнопки мыши
if (m.Msg = = 513) // WM_LBUTTONDOWN = 513
{
MessageBox.Show("WM_LBUTTONDOWN is: " + m.Msg);
return true;
}
return false; // Все остальные сообщения игнорируются
}
}

Препроцессинг сообщений// Мы должны указать это пространство имен!using Microsoft.Win32;		// Создаем класс — фильтр сообщенийpublic class MyMessageFilter : IMessageFilter{

Слайд 14Добавление фильтра
public class MainForm : Form
{
private MyMessageFilter msgFilter =

new MyMessageFilter();
...
public MainForm()
{
...
// Добавляем (регистрируем) фильтр сообщений
Application.AddMessageFilter(msgFilter);
}

// Обработчик событий
private void

Form_OnExit(object sender, EventArgs evArgs)
{
MessageBox.Show("See ya!", "This app is dead...");
// Удаляем фильтр сообщений
Application.RemoveMessageFilter(msgFilter);
}
}
Добавление фильтра public class MainForm : Form{	private MyMessageFilter msgFilter = new MyMessageFilter();	...	public MainForm()	{		...		// Добавляем (регистрируем) фильтр сообщений		Application.AddMessageFilter(msgFilter);	}	//

Слайд 15Анатомия формы
Структура оконного приложения

Анатомия формыСтруктура оконного приложения

Слайд 16Цепочка наследования класса Form

Цепочка наследования класса Form

Слайд 17Класс Component реализация интерфейса IComponent
public interface IComponent: IDisposable
{
// Свойство Site

public ISite Site { virtual get; vitural site;}

// Событие

Disposed
public event EventHandler Disposed;

}
Класс Component реализация интерфейса IComponentpublic interface IComponent: IDisposable{ // Свойство Site public ISite Site { virtual get;

Слайд 18Класс Component реализация интерфейса ISite, который позволяет элементу управления взаимодействовать с

контейнером, в котором он расположен
public interface ISite: IServiceProvider
{
// Свойства

интерфейса ISite
public IComponent Component { virtual get; }
public IContainer Container { virtual get; }
public bool DesignMode { virtual get; }
public string Name { virtual get; virtual set; }
}

Как правило, свойства ISite необходимы при разработке собственных элементов управления

Класс Component реализация интерфейса ISite, который позволяет элементу управления взаимодействовать с контейнером, в котором он расположенpublic interface

Слайд 19Переопределение метода Dispose
public override void Dispose()
{
base.Dispose();

// Здесь выполняем необходимые действия

}
Класс Component реализует метод Dispose,

но если вы лучше знаете, как освободить ресурсы, можете его переопределить.
Переопределение метода Disposepublic override void Dispose(){  base.Dispose();   // Здесь выполняем необходимые действия}Класс Component реализует

Слайд 20Класс Control
Класс Control определяет общие черты всех типов, относящихся к

элементам графического интерфейса

Класс ControlКласс Control определяет общие черты всех типов, относящихся к элементам графического интерфейса

Слайд 21Важные свойства объекта Control

Важные свойства объекта Control

Слайд 22Важные методы объекта Control

Важные методы объекта Control

Слайд 23Важные методы объекта Control

Важные методы объекта Control

Слайд 24Настройка стиля формы
public enum ControlStyles
{
AllPaintingToWmPaint,
CacheText,
ContainerControl,
EnableNotifyMessage,
FixedHeight,
FixedWidth,
Opaque,
ResizeRedraw,
Selectable,
StandardClick,
StandardDoubleClick,
SupportsTransparentBackColor,
UserMouse,
UserPaint
}
public StyleForm()
{
SetStyle(ControlStyles.ResizeRedraw,

true)
}

Настройка стиля формыpublic enum ControlStyles{		AllPaintingToWmPaint,		CacheText,		ContainerControl,		EnableNotifyMessage,		FixedHeight,		FixedWidth,		Opaque,		ResizeRedraw,		Selectable,		StandardClick,		StandardDoubleClick,		SupportsTransparentBackColor,		UserMouse,		UserPaint}public StyleForm(){    SetStyle(ControlStyles.ResizeRedraw, true)}

Слайд 25Настройка стиля формы
public enum ControlStyles
{
AllPaintingToWmPaint,
CacheText,
ContainerControl,
EnableNotifyMessage,
FixedHeight,
FixedWidth,
Opaque,
ResizeRedraw,
Selectable,
StandardClick,
StandardDoubleClick,
SupportsTransparentBackColor,
UserMouse,
UserPaint
}
public StyleForm()
{
SetStyle(ControlStyles.ResizeRedraw,

true)
}

Настройка стиля формыpublic enum ControlStyles{		AllPaintingToWmPaint,		CacheText,		ContainerControl,		EnableNotifyMessage,		FixedHeight,		FixedWidth,		Opaque,		ResizeRedraw,		Selectable,		StandardClick,		StandardDoubleClick,		SupportsTransparentBackColor,		UserMouse,		UserPaint}public StyleForm(){    SetStyle(ControlStyles.ResizeRedraw, true)}

Слайд 26Важные события класс Control

Важные события класс Control

Слайд 27Работаем с классом Control
// Необходимо для использования типа Rectangle
using System.Drawing;
...

public

class MainForm : Form
{
public static int Main(string[] args)
{
Application.Run(new MainForm());
return 0;
}

public

MainForm()
{
Top = 100;
Left = 75;
Height = 100;
Width = 500;
MessageBox.Show(Bounds.ToString(), "Current rect");
}
}
Работаем с классом Control// Необходимо для использования типа Rectangleusing System.Drawing;...public class MainForm : Form{	public static int Main(string[]

Слайд 28Завершение работы приложения
protected override void Dispose( bool disposing )
{
if( disposing

)
{
if (components != null)
components.Dispose();
}
base.Dispose( disposing );
MessageBox.Show("Disposing this Form");
}

Завершение работы приложенияprotected override void Dispose( bool disposing ){		if( disposing )		{			if (components != null) 				components.Dispose();		}	base.Dispose( disposing );	MessageBox.Show(

Слайд 29Перехват событий от мыши
public class MainForm : Form
{
public static int

Main(string[] args)
{
Application.Run(new MainForm());
return 0;
}

public MainForm()
{
Top = 100; Left =

75;
Height = 100; Width = 500;
MessageBox.Show(Bounds.ToString(), "Current rect");

// Перехватываем событие MouseUp
this.MouseUp += new MouseEventHandler(OnMouseUp);
}

// Метод, вызываемый при возникновении события MouseUp
public void OnMouseUp(object sender, MouseEventArgs e)
{
this.Text = "Clicked at: (" + e.X + ", " + e.Y +")";
}
...
}
Перехват событий от мышиpublic class MainForm : Form{	public static int Main(string[] args)	{		Application.Run(new MainForm());		return 0;	}	public MainForm()	{		Top = 100;

Слайд 30Перехват событий от мыши
public class MainForm : Form
{
...
public MainForm()
{
...
// Отслеживаем

движения мыши (вместе с событием MouseUp
this.MouseUp += new MouseEventHandler(OnMouseUp);
this.MouseMove

+= new MouseEventHandler(OnMouseMove);
}

public void OnMouseUp(object sender, MouseEventArgs e)
{
if(e.Button = = MouseButtons.Left)
MessageBox.Show("Left click!");
if(e.Button = = MouseButtons.Right)
MessageBox.Show("Right click!");
if(e.Button = = MouseButtons.Middle)
MessageBox.Show("Middle click!");
}

public void OnMouseMove(object sender, MouseEventArgs e)
{
this.Text = "Current Pos: (" + e.X + ", " + e.Y + ")";
}
...
}
Перехват событий от мышиpublic class MainForm : Form{...	public MainForm()	{		...		// Отслеживаем движения мыши (вместе с событием MouseUp 		this.MouseUp

Слайд 312-й вариант
public class MainForm : Form
{
public MainForm()
{
// Сейчас обработчики событий

нам уже нужны
// this.MouseUp += new MouseEventHandler(OnMouseUp);
// this.MouseUp += new

MouseEventHandler(OnMouseMove);
}

protected override void OnMouseUp( //object sender, MouseEventArgs e)
{
// Какая кнопка мыши нажата?
if(e.Button == MouseButtons.Left) MessageBox.Show("Left click!");
if(e.Button == MouseButtons.Right) MessageBox.Show("Right click!");
if(e.Button == MouseButtons.Middle) MessageBox.Show("Middle click!");
}

protected override void OnMouseMove(//object sender,
MouseEventArgs e)
{
this.Text = "Current Pos: (" + e.X + ", " + e.Y + ")";
}
...
}
2-й вариантpublic class MainForm : Form{		public MainForm()		{		// Сейчас обработчики событий нам уже нужны		// this.MouseUp += new MouseEventHandler(OnMouseUp);		//

Слайд 32Реагируем на события клавиатуры
public class MainForm : form
{
...
public MainForm()
{
Top =

100; Left = 75;
Height = 100; Width = 500;
MessageBox.Show(Bounds.ToString(), "Current rect");
...
// Перехватываем

событие KeyUp
this.KeyUp += new KeyEventHandler(OnKeyUp);
}

public void OnKeyUp(object sender, KeyEventArgs e)
{
MessageBox.Show(e.KeyCode.ToString(), "KeyPressed!");
}
...
}
Реагируем на события клавиатурыpublic class MainForm : form{...	public MainForm()	{		Top = 100;		Left = 75;		Height = 100;		Width = 500;		MessageBox.Show(Bounds.ToString(),

Слайд 33Свойства класса KeyEventArgs

Свойства класса KeyEventArgs

Слайд 34Дополнительные свойства класса Control

Дополнительные свойства класса Control

Слайд 35Дополнительные методы класса Control

Дополнительные методы класса Control

Слайд 36Дополнительные события класса Control

Дополнительные события класса Control

Слайд 37Возможности класса Control
using System;
using System.Windows.Forms;
using System.Drawing; // Для типов Color, Brush

и Font

public class MainForm : Form
{ ...
public MainForm()
{
// Устанавливаем значения некоторых

свойств
BackColor = Color.Tomato;
Opacity = 0.5d;
Cursor = Cursors.WaitCursor;

// Перехватываем событие Paint
this.Paint += new PaintEventHandler(Form1_Paint);
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawString("What a head trip...",
new Font("Times New Roman", 20),
new SolidBrush(Color.Black), 40, 10);
}
}
Возможности класса Controlusing System;using System.Windows.Forms;using System.Drawing;	// Для типов Color, Brush и Fontpublic class MainForm : Form{	...	public MainForm()	{	//

Слайд 38Событие Paint и PaintEventArgs
ClipRectangle – прямоугольная область вывода изображения
Graphics – контекст

вывода изображения

Событие Paint и PaintEventArgsClipRectangle – прямоугольная область вывода изображенияGraphics – контекст вывода изображения

Слайд 39Класс ScrollableControl
// Этот код помещается в конструктор класса
// InitializeComponent()


// Для работы с классом Size также нужна ссылка
// на

пространство имен System.Drawing

this.AutoScroll = true;
this.AutoScrollMiSize=new System.Drawing.Size(300,300);

Класс ScrollableControl// Этот код помещается в конструктор класса // InitializeComponent() // Для работы с классом Size также

Слайд 40Класс ContainerControl

Класс ContainerControl

Слайд 41Некоторые свойства класса Form (2)

Некоторые свойства класса Form (2)

Слайд 42Некоторые свойства класса Form

Некоторые свойства класса Form

Слайд 43Некоторые методы класса Form

Некоторые методы класса Form

Слайд 44Некоторые события класса Form

Некоторые события класса Form

Слайд 45Иллюстрация возможностей класса Form
public class MainForm: Form

{
...
public MainForm()
{
//

Настраиваем исходный облик нашей формы
BackColor = Color.LemonChiffon; // Цвет фона:
Text =

"My Fantastic Form"; // Заголовок формы:
Size = new Size(200, 200); // Размер 200*200:
CenterToScreen(); // Помещаем форму в центр экрана:

// Перехватываем события
this.Resize += new EventHandler(this.MainForm_Resize);
this.Paint += new PaintEventHandler(this.MainForm_Paint);
}

private void MainForm_Resize(object sender, System.EventArgs e)
{
// При изменении размера формы ее изображение нужно обновить! Можно также
// вместо вызова Invalidate просто установить поддержку стиля ResizeRedraw
Invalidate();
}

// Выводим текстовую строку.
private void MainForm_paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawString("Windows Forms is for building GUIs!",
new Font("Times New Roman", 20), new SolidBrush(Color.Black),
this.DisplayRectangle); // Выводим в клиентской прямоугольной области
}
}
Иллюстрация возможностей класса Formpublic class MainForm: Form{		... public MainForm() {	// Настраиваем исходный облик нашей формы	BackColor = Color.LemonChiffon;		//

Слайд 46Меню

Меню

Слайд 47Члены класса Menu

Члены класса Menu

Слайд 48Члены вложенного класса Menu$MenuItemCollection

Члены вложенного класса Menu$MenuItemCollection

Слайд 49Создание меню программным способом
public class MainForm: Form
{
private MainMenu

mainMenu; // Главное меню для Form

public MainForm()

{
mainMenu = new MainMenu(); // Создаем главное меню

// Создаем меню File и добавляем его в MenuItemCollection
MenuItem miFile = mainMenu.MenuItems.Add("&File");

// Теперь создаем подменю Exit и добавляем его в меню File. Этот вариант Add()
// принимает: (1) создаваемый объект MenuItem; (2) создаваемый делегат
// (EventHandler); (3) необязательную клавиатурную комбинацию быстрого доступа

miFileMenuItems.Add(new MenuItem("E&xit", new EventHandler(this.FileExit_Clicked),Shortcut.CtrlX));

// Присоединяем главное меню к объекту Form
this.Menu = mainMenu;
}
...
}
Создание меню программным способомpublic class MainForm: Form{  private MainMenu mainMenu; // Главное меню для Form

Слайд 50public class MainForm : Form // Простое приложение с главным

меню
{
// Главное меню для формы
private MainMenu mainMenu;

//

Запускаем приложение
[STAThread]
public static int Main(string[] args) { Application.Run(new MainForm()); }

// Создаем форму
public MainForm()
{
// Настраиваем исходный облик и местонахождение формы
Text = "Simple Menu"; CenterToScreen();

mainMenu = new MainMenu(); // Создаем объект главного меню

// Создаем меню File | Exit
MenuItem miFile = mainMenu.MenuItems.Add("&File");
miFile.MenuItems.Add(new MenuItem("E&xit",
new EventHandler(this.FileExit_Clicked), Shortcut.CtrlX));

this.Menu = mainMenu; // Присоединяем главное меню к объекту Form

// MainMenu.GetForm() возвращает ссылку на форму, на которой расположено
// меню. Поэтому мы можем сделать такой маленький фокус:
mainMenu.GetForm().BackColor = Color.Black;
}

// И не забыть про обработчик событий для File-Exit
private void FileExit_Clicked(object sender, EventArgs e)
{
this.Close(); // Выход из приложения
}
}
public class MainForm : Form // Простое приложение с главным меню{ // Главное меню для формы private

Слайд 51Добавляем еще одно меню верхнего уровня
public class MainForm : Form
{

private MainMenu mainMenu;
...
public MainForm()
{
// Создаем

меню File - Exit
MenuItem miFile = mainMenu.MenuItems.Add("&File");
miFile.MenuItems.Add(new MenuItem("E&xit",
new EventHandler(this.FileExit_Clicked), Shortcut.CtrlX));

// А теперь — еще и меню Help - About
MenuItem miHelp = mainMenu.MenuItems.Add("Help");
miHelp.MenuItems.Add(new MenuItem("&About",
new EventHandler(this.HelpAbout_Clicked), Shortcut.CtrlA));
...
}
// И обработчик события для Help - About
private void HelpAbout_Clicked(object sender, EventArgs e)
{
MessageBox.Show("The amazing menu app...");
}
}
Добавляем еще одно меню верхнего уровняpublic class MainForm : Form{ private MainMenu mainMenu; ... public MainForm() {

Слайд 52Создаем контекстное меню I
namespace MainForm
{
// Вспомогательная структура для установки размера

шрифта
internal struct TheFontSize
{
public static int Huge = 30;
public static

int Normal = 20;
public static int Tiny = 8;
}

public class MainForm : Form
{
// Исходный размер шрифта
private int currFontSize = TheFontSize.Normal;

// Контекстное меню формы
private ContextMenu popUpMenu;

public static void Main(string[] args)
{
Application.Run(new MainForm());
}

private void MainForm_Resize(object sender, System.EventArgs e)
{
Invalidate();
}
Создаем контекстное меню Inamespace MainForm{	// Вспомогательная структура для установки размера шрифта 	internal struct TheFontSize	{		public static int Huge

Слайд 53Создаем контекстное меню II
public MainForm()
{
// Прежде всего создаем контекстное меню
popUpMenu

= new ContextMenu();

// Теперь добавляем в контекстное меню элементы
popUpMenu.MenuItems.Add("Huge", new

EventHandler(PopUp_Clicked));
popUpMenu.MenuItems.Add("Normal", new EventHandler(PopUp_Clicked));
popUpMenu.MenuItems.Add("Tiny", new EventHandler(PopUp_Clicked));

// Теперь подключаем контекстное меню к форме
this.ContextMenu = popUpMenu;

// Ставим обработчики событий
this.Resize += new System.EventHandler(this.MainForm_Resize);
this.Paint += new PaintEventHandler(this.MainForm_Paint);
}
Создаем контекстное меню IIpublic MainForm(){	// Прежде всего создаем контекстное меню	popUpMenu = new ContextMenu();	// Теперь добавляем в контекстное

Слайд 54Создаем контекстное меню III
// Обработчик для PopUp_Clicked (всех трех пунктов)
private

void PopUp_Clicked(object sender, EventArgs e)
{
// Ориентируемся на строковое имя выбранного

пользователем элемента меню
MenuItem miClicked = (MenuItem)sender;
string item = miClicked.Text;

if(item = = "Huge") currFontSize = TheFontSize.Huge;
if(item = = "Normal") currFontSize = TheFontSize.Normal;
if(item = = "Tiny") currFontSize = TheFontSize.Tiny;
Invalidate();
}

private void MainForm_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawString("Please click on me...",
new Font("Times New Roman", (float)currFontSize),
new SolidBrush(Color.Black),
this.DisplayRectangle);
}
}
}
Создаем контекстное меню III// Обработчик для PopUp_Clicked (всех трех пунктов)private void PopUp_Clicked(object sender, EventArgs e){// Ориентируемся на

Слайд 55Дополнительные возможности меню

Дополнительные возможности меню

Слайд 56Дополнительные возможности меню

Дополнительные возможности меню

Слайд 57Установка флажка в контекстном меню I
public class MainForm : Form
{
//

Текущий размер шрифта
private int currFontSize = TheFontSize.Normal;

// Контекстное меню для

формы
private ContextMenu popUpMenu;

// Дополнительные ссылки для отслеживания пункта меню,
// напротив которого надо установить флажок

private MenuItem currentCheckedItem;
// Представляет выбранный в настоящий момент пункт меню

private MenuItem checkedHuge;
private MenuItem checkedNormal;
private MenuItem checkedTiny;
...
}
Установка флажка в контекстном меню Ipublic class MainForm : Form{	// Текущий размер шрифта	private int currFontSize = TheFontSize.Normal;	//

Слайд 58Установка флажка в контекстном меню II
// Конструктор формы
public MainForm()
{
// Настраиваем

исходный облик формы
Text = "PopUp Menu"; CenterToScreen();

// Прежде всего создаем

контекстное меню
popUpMenu = new ContextMenu();

// А теперь добавляем пункты меню
popUpMenu.MenuItems.Add("Huge", new EventHandler(PopUp_Clicked));
popUpMenu.MenuItems.Add("Normal", new EventHandler(PopUp_Clicked));
popUpMenu.MenuItems.Add("Tiny", new EventHandler(PopUp_Clicked));

this.ContextMenu = popUpMenu;

// Теперь привязываем каждую из наших ссылок на MenuItem к элементам
// контекстного меню
checkedHuge = this.ContextMenu.MenuItems[0];
checkedNormal = this.ContextMenu.MenuItems[1];
checkedTiny = this.ContextMenu.MenuItems[2];

// А теперь ставим флажок напротив Normal:
currentCheckedItem = checkedNormal;
currentCheckedItem.Checked = true;
}
Установка флажка в контекстном меню II// Конструктор формыpublic MainForm(){	// Настраиваем исходный облик формы	Text =

Слайд 59Установка флажка в контекстном меню III
private void PopUp_Clicked(object sender, EventArgs

e)
{
// Снимаем флажок с выбранного в настоящий момент пункта
currentCheckedItem.Checked

= false;

// Определяем название выбранного пользователем пункта меню
MenuItem miClicked = (MenuItem)sender;
string item = miClicked.Text;

// В ответ на выбор пользователя устанавливаем нужный размер шрифта и флажок
// напротив пункта меню
if(item = = "Huge") { currFontSize = TheFontSize.Huge;
currentCheckedItem = checkedHuge;
}
if(item = = "Normal") { currFontSize = TheFontSize.Normal;
currentCheckedItem = checkedNormal;
}
if(item = = "Tiny") { currFontSize = TheFontSize.Tiny;
currentCheckedItem = checkedTiny;
}

// А теперь устанавливаем флажок
currentCheckedItem.Checked = true;
Invalidate();
}
Установка флажка в контекстном меню IIIprivate void PopUp_Clicked(object sender, EventArgs e){// Снимаем флажок с выбранного в настоящий

Слайд 60Создание меню при помощи VS

Создание меню при помощи VS

Слайд 61Свойства объекта StatusBar

Свойства объекта StatusBar

Слайд 62Свойства объекта StatusBarPanel

Свойства объекта StatusBarPanel

Слайд 63Свойства объекта StatusBarPanel

Свойства объекта StatusBarPanel

Слайд 64Создаем строку состояния
public class MainForm : Form
{
// Создаем объекты для

всей строки состояния и ее
// отдельных панелей


private StatusBar statusBar = new StatusBar();
private StatusBarPanel sbPnlPrompt = new StatusBarPanel();
private StatusBarPanel sbPnlTime = new StatusBarPanel();

public MainForm()
{
...
// Метод, который создаст нам строку состояния
// и настроит ее нужным образом

BuildStatBar();
}
Создаем строку состоянияpublic class MainForm : Form{	// Создаем объекты для всей строки состояния и ее  //

Слайд 65Создаем строку состояния
private void BuildStatBar()
{
// Настраиваем строку состояния
statusBar.ShowPanels = true;
statusBar.Size

= new System.Drawing.Size(212, 20);
statusBar.Location = new System.Drawing.Point(0, 216);

// Панели добавляются

в строку состояния при помощи метода AddRange()
statusBar.Panels.AddRange(new StatusBarPanel[] {sbPnlPrompt, sbPnlTime});

// Настраиваем левую панель
sbPnlPrompt.BorderStyle = StatusBarPanelBorderStyle.None;
sbPnlPrompt.AutoSize = StatusBarPanelAutoSize.Spring;
sbPnlPrompt.Width = 62;
sbPnlPrompt.Text = "Ready";

// Настраиваем правую панель
sbPnlTime.Alignment = HorizontalAlignment.Right;
sbPnlTime.Width = 76;
Создаем строку состоянияprivate void BuildStatBar()	{		// Настраиваем строку состояния		statusBar.ShowPanels = true;		statusBar.Size = new System.Drawing.Size(212, 20);		statusBar.Location = new System.Drawing.Point(0,

Слайд 66Создаем строку состояния
// Добавляем значок
try
{
// Этот значок обязательно должен

находиться в каталоге приложения.
Icon i = new Icon("status.ico");
sbPnlPrompt.Icon =

i;
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}

// Теперь добавляем панель управления в коллекцию Controls
// для формы
this.Controls.Add(statusBar);
}
}
Создаем строку состояния	// Добавляем значок 	try	{	// Этот значок обязательно должен находиться в каталоге приложения. 		Icon i =

Слайд 67Члены класса Timer

Члены класса Timer

Слайд 68Работа с таймером
public class MainForm : Form
{
...
private Timer timer1 =

new Timer();

public MainForm()
{
// Настраиваем объект Timer
timer1.Interval = 1000;
timer1.Enabled = true;
timer1.Tick

+= new EventHandler(timer1_Tick);
...
}

// Этот метод будет вызываться примерно каждую секунду
private void timer1_Tick(object sender, EventArgs e)
{
DateTime t = DateTime.Now;
string s = t.ToLongTimeString();

// Выводим полученное строковое значение на правую панель
sbPnlTime.Text = s;
}
}
Работа с таймеромpublic class MainForm : Form{...		private Timer timer1 = new Timer();		public MainForm()		{			// Настраиваем объект Timer			timer1.Interval =

Слайд 69Отображение в строке состояния подсказок к пунктам меню
public class MainForm

: Form
{
...
public MainForm()
{
...
// Событие MenuComplete происходит при выходе пользователем из

меню.
// Мы будем реагировать на это событие, возвращая в левую панель строку
// по умолчанию "Ready". Если мы этого не сделаем, в строке состояния
// останется значение, которое изменилось при выборе пользователем пункта меню!
this.MenuComplete += new EventHandler(StatusForm_MenuDone);
BuildMenuSystem();
}

private void FileExit_Selected(object sender, EventArgs e)
{
sbPnlPrompt.Text = "Terminates this app";
}

private void HelpAbout_Selected(object sender, EventArgs e)
{
sbPnlPrompt.Text = "Displays app info";
}

private void StatusForm_MenuDone(object sender, EventArgs e)
{
sbPnlPrompt.Text = "Ready";
}
Отображение в строке состояния подсказок к пунктам менюpublic class MainForm : Form{		...	public MainForm()	{			...	// Событие MenuComplete происходит при

Слайд 70Отображение в строке состояния подсказок к пунктам меню
// Вспомогательные функции
private

void BuildMenuSystem()
{
// Создаем главное меню
mainMenu = new MainMenu();

// Создаем меню

File
MenuItem miFile = mainMenu.MenuItems.Add("&File");
miFile.MenuItems.Add(new MenuItem("E&xit",
new EventHandler(this.FileExit_Clicked), Shortcut.CtrlX));

// Обрабатываем событие Select для пункта меню Exit
miFile.MenuItems[0].Select += new EventHandler(FileExit_Selected);

// Теперь создаем меню Help | About
MenuItem miHelp = mainMenu.MenuItems.Add("Help");
miHelp.MenuItems.Add(new MenuItem("&About",
new EventHandler(this.HelpAbout_Clicked), Shortcut.CtrlA));

// Обрабатываем событие Select для пункта меню About
miHelp.MenuItems[0].Select += new EventHandler(HelpAbout_Selected);

// Присоединяем главное меню к объекту Form
this.Menu = mainMenu;
}
...
}
Отображение в строке состояния подсказок к пунктам меню// Вспомогательные функцииprivate void BuildMenuSystem(){	// Создаем главное меню	mainMenu = new

Слайд 71Панель инструментов
Класс ToolBar
Класс ToolBarButton
Поместить кнопки в ToolBarButtonCollection объекта ToolBar

Панель инструментовКласс ToolBarКласс ToolBarButtonПоместить кнопки в ToolBarButtonCollection объекта ToolBar

Слайд 72Свойства класса ToolBar

Свойства класса ToolBar

Слайд 73Свойства класса ToolBarButton

Свойства класса ToolBarButton

Слайд 74Простейшая (без изображений) панель
public class MainForm : Form
{
// Создаем панель

инструментов и две кнопки
private ToolBarButton tbSaveButton = new ToolBarButton();
private ToolBarButton

tbExitButton = new ToolBarButton();
private ToolBar toolBar = new ToolBar();

public MainForm()
{
...
BuildToolBar(); // Вспомогательная функция
}
...
Простейшая (без изображений) панельpublic class MainForm : Form{	// Создаем панель инструментов и две кнопки	private ToolBarButton tbSaveButton =

Слайд 75Простейшая (без изображений) панель
private void BuildToolBar()
{
// Настраиваем каждую кнопку
tbSaveButton.Text =

"Save";
tbSaveButton.ToolTipText = "Save";
tbExitButton.Text = "Exit";
tbExitButton.ToolTipText = "Exit";

// Настраиваем параметры панели

инструментов и добавляем на нее кнопку
toolBar.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
toolBar.ShowToolTips = true;
toolBar.Buttons.AddRange(new ToolBarButton[]
{tbSaveButton, tbExitButton});
toolBar.ButtonClick += new ToolBarButtonClickEventHandler(ToolBar_Clicked);
// Добавляем панель инструментов в коллекцию Controls
this.Controls.Add(toolBar);
}

// Обработчик событий для кнопок
private void ToolBar_Clicked(object sender, ToolBarButtonClickEventArgs e)
{ MessageBox.Show(e.Button.ToolTipText);}
}
Простейшая (без изображений) панельprivate void BuildToolBar(){	// Настраиваем каждую кнопку	tbSaveButton.Text =

Слайд 76Добавление изображений
public class MainForm : Form
{
// Объект для

хранения набора изображений
private ImageList toolBarIcons = new ImageList();

...
private void BuildToolBar()
{
// Настраиваем кнопку "Save"
tbSaveButton.ImageIndex = 0;
tbSaveButton.ToolTipText = "Save";

// Настраиваем кнопку "Exit"
tbExitButton.ImageIndex = 1;
tbExitButton.ToolTipText = "Exit";

// Создаем панель инструментов и добавляем на нее кнопки
toolBar.ImageList = toolBarIcons;
...
// Загружаем значки (соответствующие файлы должны быть в каталоге приложения
toolBarIcons.ImageSize = new System.Drawing.Size(32, 32);
toolBarIcons.Images.Add(new Icon("filesave.ico"));
toolBarIcons.Images.Add(new Icon("fileexit.ico"));
toolBarIcons.ColorDepth = ColorDepth.Depth16Bit;
toolBarIcons.TransparentColor = System.Drawing.Color.Transparent;
...
}
}
Добавление изображенийpublic class MainForm : Form{  // Объект для хранения набора изображений  private ImageList toolBarIcons

Слайд 77Создание панели инструментов в VS

Создание панели инструментов в VS

Слайд 78Пример работы с системным реестром
// Предположим, что у нас установлены

следующие значения переменных:
// Color currColor = Color.MistyRose;
// private int

currFontSize = TheFontSize.Normal;

private void FileSave_Clicked(object sender, EventArgs e)
{
// Сохраняем настройки пользователя в реестре
RegistryKey regKey = Registry.CurrentUser;
regKey = regKey.CreateSubKey("Software\\Intertech\\Chapter8App");
regKey.SetValue("CurrSize", currFontSize);
regKey.SetValue("CurrColor", currColor.Name);
}
Пример работы с системным реестром// Предположим, что у нас установлены следующие значения переменных: // Color currColor =

Слайд 79Пример работы с системным реестром
public MainForm()
{
// Открываем параметр реестра
RegistryKey regKey

= Registry.CurrentUser;
regKey = regKey.CreateSubKey("Software\\Intertech\\Chapter8App");

// Считываем значения и присваиваем их соответствующим

переменным
currFontSize = (int)regKey.GetValue("CurrSize", currFontSize);
string c = (string)regKey.GetValue("CurrColor", currColor.Name);
currColor = Color.FromName(c);
BackColor = currColor;

...
}

Если параметр не найден

Пример работы с системным реестромpublic MainForm(){	// Открываем параметр реестра	RegistryKey regKey = Registry.CurrentUser;	regKey = regKey.CreateSubKey(

Слайд 80Запись в журнал событий
// Срабатывает при активизации пользователем пункта меню

File4Exit
private void FileExit_Clicked(object sender, EventArgs e)
{
// Мы делаем

записи в журнал событий приложений ("Application"),
// могли бы и в другой...
EventLog log = new EventLog();
log.Log = "Application";
log.Source = Text;
log.WriteEntry("Hey dude, this app shut down...");
log.Close();

// Завершаем работу приложения
this.Close();
}
Запись в журнал событий// Срабатывает при активизации пользователем пункта меню File4Exit private void FileExit_Clicked(object sender, EventArgs e){

Слайд 81Чтение журнала событий
private void FileExit_Clicked(object sender, EventArgs e)
{
...
// Отображаем первые

пять записей журнала событий приложений
for(int i = 0; i

< 5; i++)
{
try
{
MessageBox.Show("Message: " + log.Entries[i].Message + "\n" + "Box name: "
+ log.Entries[i].MachineName + "\n" + "App: " +
log.Entries[i].Source + "\n" + "Time entered: " +
log.Entries[i].TimeWritten, "Application Log entry:");
}
catch {}
}
}
Чтение журнала событийprivate void FileExit_Clicked(object sender, EventArgs e){		...// Отображаем первые пять записей журнала событий приложений for(int i

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

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


Для правообладателей

Яндекс.Метрика