Создание Windows-приложений на основе Visual C#

         

static void Metod( string s)


using System;
namespace Delegate {
class Class1 { delegate void Mydelegate( string s);
static void Metod( string s) { Console.WriteLine(s); }
[STAThread] static void Main(string[] args) { Mydelegate del = new Mydelegate(Metod); del("переменная типа string, которую принимает Metod, вызываемый делегатом del"); } } }
Листинг 1.1. Полный листинг проекта Delegate
Закрыть окно

using System;
namespace Delegate2 { // Создаем новый класс chelovek class chelovek { //Объявляем переменную slovo public string slovo; //Создаем метод govorit public void govorit( string s) { Console.WriteLine( slovo + s); } class Class1 { //Объявляем делегат Mydelegate, который имеет ту же саму сигнатуру, что и метод govorit delegate void Mydelegate(string s);
[STAThread] static void Main(string[] args) { //Создаем экземпляр student класса chelovek chelovek student = new chelovek(); //Создаем экземпляр del делегата Mydelegate Mydelegate del = new Mydelegate(student.govorit); //Переменной slovo экземпляра student присваиваем значение "привет" student.slovo = "привет"; // Экземпляру делегата del передаем переменную в кавычках del(" - Сказал студент через делегат"); //Переменной slovo экземпляра student присваиваем значение "пока" student.slovo = "пока"; // Экземпляру делегата del передаем переменную в кавычках del(" - Сказал студент через делегат"); } } } }
Листинг 1.2.
Закрыть окно

using System;




namespace Matem { // Создаем новый класс matematika class matematika { //Объявляем переменную a public int a; //Создаем метод calculate public void calculate() { int b = a*a; int c = a*a*a; int d = a*a*a*a; Console.WriteLine ("Само число: " + a + "\nКвадрат: " + b + "\nКуб: " + c + " \nЧетвертая степень:" + d); } } class Class1 { [STAThread] static void Main(string[] args) { //Создаем экземпляр primer класса matematika matematika primer = new matematika(); //Переменной a экземпляра primer присваиваем значение 2 primer.a = 2; //Вызываем метод calculate primer.calculate();
} } }
Листинг 1.3.
Закрыть окно

using System;
namespace Matem2 { // Создаем новый класс matematika class matematika { //Объявляем переменную a public int a; //Создаем метод calculate public void calculate(int chislo) { int b = a*a; int c = a*a*a; int d = a*a*a*a; Console.WriteLine ("Само число: " + a + "\nКвадрат: " + b + "\nКуб: " + c + " \nЧетвертая степень:" + d); } } class Class1 { delegate void Mydelegate(int chislo); [STAThread] static void Main(string[] args) { //Создаем экземпляр primer класса matematika matematika primer = new matematika(); //Создаем экземпляр del делегата Mydelegate Mydelegate del = new Mydelegate(primer.calculate); //Переменной a экземпляра primer присваиваем значение 2 primer.a = 2; // Экземпляру делегата del передаем переменную del(1); //Переменной a экземпляра primer присваиваем значение 3 primer.a = 3; // Экземпляру делегата del передаем переменную del(2); //Переменной a экземпляра primer присваиваем значение 4 primer.a = 4; // Экземпляру делегата del передаем переменную del(3);
} } }
Листинг 1.4.
Закрыть окно

using System;
namespace Matem3 { class matematika {
public int a;
public void calculatesamochislo(int chislo) { Console.WriteLine ("Само число: " + a); } public void calculatecvadrat(int chislo) { int b = a*a; Console.WriteLine ("\nКвадрат: " + b); } public void calculatecub(int chislo) { int c = a*a*a; Console.WriteLine ("\nКуб: " + c); } }
class Class1 { delegate void Mydelegate(int chislo);
[STAThread] static void Main(string[] args) { matematika primer = new matematika(); Mydelegate del = new Mydelegate(primer.calculatesamochislo); // Экземпляру делегата del добавляем метод calculatecvadrat del+= new Mydelegate(primer.calculatecvadrat); //Экземпляру делегата del добавляем метод calculatecvadrat del+= new Mydelegate(primer.calculatecub); primer.a = 2; del(1); // //Развернутый вариант // del=del + new Mydelegate(primer.calculatecvadrat); // del = del+ new Mydelegate(primer.calculatecub); // primer.a = 2; // del(1);
} } }
Листинг 1.5.
Закрыть окно

using System;
namespace Event { // Объявляем делегат Mydelegate delegate void Mydelegate(); //Создаем класс Button, в котором будет находится событие и метод для него class Button { // Объявляем событие Sobitie на основе делегата public event Mydelegate Sobitie; //Cоздаем метод для события, который просто будет обращаться к событию public void MetoddlyaSobitiya()
{ //Можно вставить проверку наличия события //if (Sobitie !=null) Sobitie(); }
class Class1 { [STAThread] static void Main(string[] args) { // Создаем экземпляр btn класса Button Button btn = new Button(); //привязываем обработчика для события Sobitie экземпляра btn. Когда в //скобках укажете // Metodobrabotchik, нажмите дважды клавишу Tab btn.Sobitie += new Mydelegate(Metodobrabotchik); //Развернутая запись строки выше //btn.Sobitie = btn.Sobitie + new Mydelegate(Metoddlyadelegata); //вызываем метод для события btn.MetoddlyaSobitiya(); } // Создаем метод-обработчик, если среда сгенерировала его сама — добавляем //строку вывода private static void Metodobrabotchik () { Console.WriteLine("Произошло событие"); } } } }
Листинг 1.6.
Закрыть окно

using System;
namespace ClasswitnEvent { // Объявляем делегат по имени EventHandler (Event Handler — oбработчик события) public delegate void EventHandler(); // Создаем класс "Игральная кость" class IgralnayaKost { Random r; //Объявляем событие на основе делегата public event EventHandler max; //В конструкторе класса объявляем переменную r, генерируемую встроеным объектом Random public IgralnayaKost() { r=new Random(); } //Создаем метод, в котором будет вызываться событие public int random() { //Случаное число от 1 до 6 int res = r.Next(6)+1; if(res==6) { //Вызываем событие max(); } return res; } }
class Class1 { /// <summary> /// The main entry point for the application /// </summary> [STAThread] static void Main(string[] args) {
//Создаем экземпляр brosok класса IgralnayaKost IgralnayaKost brosok=new IgralnayaKost(); //Добавляем обработчика события brosok.max+=new EventHandler(Metodobrabotchik); //Вызываем метод, в котором вызывается событие for(int i=0; i<15; i++) { Console.WriteLine("{0}", brosok.random()); }
} //Обработчик для события public static void Metodobrabotchik() { Console.WriteLine("Выпало максимальное количество очков"); } } }
Листинг 1.7.
Закрыть окно

class mehanizmcalkulyatora { /// <summary> /// Создаем перечисление Deystvie для определения одного из четырех действий калькулятора /// </summary> public enum Deystvie:int { NeopredelDeystvie = 0, Slojenie = 1, Vichitanie = 2, Umnojenie = 3, Delenie = 4 }
/// <summary> /// Объявляем и инициализируем переменную, /// которая будет использоваться для смены знака при нажатии клавиши (+/–) /// </summary>
private static double peremennayaMinus = -1;
/// <summary> /// Объявляем переменные для работы калькулятора: /// resultatVichisleniy — переменная для хранения /// промежуточного результата в механизме калькулятора; /// resultatOutput — переменная, значение которой будет сниматься с экрана и выводиться на него; /// tekusheeDeystvieCalculatora — хранение одного из действий калькулятора; /// pervoeChislo — переменная, в которую будет записываться число на экране /// до нажатия на одну из четырех кнопок с действием; /// vtoroeChislo — второе число на экране; /// dobavlenierazryada — при добавлении следующего разряда эта переменная примет значение true; /// ChislosTochkoy — при добавлении десятичного разряда (знака точки) эта переменная примет значение true /// </summary>
private static double resultatVichisleniy; private static string resultatOutput; private static Deystvie tekusheeDeystvieCalculatora; private static double pervoeChislo; private static double vtoroeChislo; private static bool dobavlenierazryada; private static bool ChislosTochkoy;
/// <summary> /// В конструкторе класса mehanizmcalkulyatora инициализируем переменные /// ChislosTochkoy и dobavlenierazryada — при запуске калькулятора на экране /// нет ни разрядности, ни десятичной части /// </summary>
public mehanizmcalkulyatora () { ChislosTochkoy = false; dobavlenierazryada = false; }
/// <summary> /// В этом методе переменная resultatOutput изменяется — при вводе числа ее значение перезаписывается /// </summary>
public static string chislonaEkrane (string najatayaKlavisha) { resultatOutput = resultatOutput + najatayaKlavisha; return (resultatOutput); } /// <summary> /// Метод, в котором определяется peremenDeystviya, — одно значение перечисления ///Deystvie, ///в зависимости от выбора клавиши +, –, * или / /// </summary>
public static void DeystvieCalculatora (Deystvie peremenDeystviya) { try { if (resultatOutput != "" && !dobavlenierazryada) { pervoeChislo = System.Convert.ToDouble (resultatOutput); tekusheeDeystvieCalculatora = peremenDeystviya; resultatOutput = ""; ChislosTochkoy = false; } }
catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally {
} }
/// <summary> /// При нажатии кнопки +/– число на экране — tekusheeChislo умножается на –1, /// а затем результат снова присваивается переменной resultatOutput /// </summary>
public static string ZnakChisla () { double tekusheeChislo;
if (resultatOutput != "") { tekusheeChislo = System.Convert.ToDouble (resultatOutput); resultatOutput = System.Convert.ToString(tekusheeChislo * peremennayaMinus); }
return (resultatOutput); }
/// <summary> /// При нажатии кнопки ( , ) переменная resultatOutput приобретает дробную часть /// </summary>
public static string ZnakTochki () { if (!ChislosTochkoy && !dobavlenierazryada) { if (resultatOutput != "") resultatOutput = resultatOutput + ","; else resultatOutput = "0,";
ChislosTochkoy = true; }
return (resultatOutput); }
/// <summary> /// При нажатии кнопки ZnakRavno обрабатываются значения /// переменнных pervoeChislo и vtoroeChislo, результат присваивается переменной ///resultatVichisleniy, /// которая затем преобразуется в resultatOutput /// </summary>
public static string ZnakRavno () { bool proverkaOshibok = false;
if (resultatOutput != "") { vtoroeChislo = System.Convert.ToDouble (resultatOutput); dobavlenierazryada = true;
switch (tekusheeDeystvieCalculatora) { case Deystvie.NeopredelDeystvie: proverkaOshibok = false; break;
case Deystvie.Slojenie: resultatVichisleniy = pervoeChislo + vtoroeChislo; proverkaOshibok = true; break;
case Deystvie.Vichitanie: resultatVichisleniy = pervoeChislo – vtoroeChislo; proverkaOshibok = true; break;
case Deystvie.Umnojenie: resultatVichisleniy = pervoeChislo * vtoroeChislo; proverkaOshibok = true; break;
case Deystvie.Delenie: resultatVichisleniy = pervoeChislo / vtoroeChislo; proverkaOshibok = true; break;
default: proverkaOshibok = false; break; }
if (proverkaOshibok) resultatOutput = System.Convert.ToString (resultatVichisleniy); }
return (resultatOutput); }
/// <summary> /// При нажатии кнопки С (сброс) значения переменных обнуляются /// </summary>
public static void Sbros () { resultatVichisleniy = 0; pervoeChislo = 0; vtoroeChislo = 0; resultatOutput = ""; tekusheeDeystvieCalculatora = Deystvie.NeopredelDeystvie; ChislosTochkoy = false; dobavlenierazryada = false; } }
Листинг 1.8.
Закрыть окно

public class Calc : System.Windows.Forms.Form { private System.Windows.Forms.TextBox txtOutput; private System.Windows.Forms.Button btn_sbros; private System.Windows.Forms.Button btnChangesign; private System.Windows.Forms.Button btnpoint; private System.Windows.Forms.Button btn_ravno; private System.Windows.Forms.Button btn_delenie; private System.Windows.Forms.Button btn_umnojenie; private System.Windows.Forms.Button btn_plus; private System.Windows.Forms.Button btn_minus; private System.Windows.Forms.Button btn0; private System.Windows.Forms.Button btn9; private System.Windows.Forms.Button btn8; private System.Windows.Forms.Button btn7; private System.Windows.Forms.Button btn6; private System.Windows.Forms.Button btn5; private System.Windows.Forms.Button btn4; private System.Windows.Forms.Button btn3; private System.Windows.Forms.Button btn2; private System.Windows.Forms.Button btn1; private System.ComponentModel.Container components = null; /// <summary> /// Объявляем и инициализируем переменные, которые будут /// возникать на экране при нажатии соответствующих кнопок /// </summary> private const string odin = "1"; private const string dva = "2"; private const string tri = "3"; private const string chetire = "4"; private const string pyat = "5"; private const string shest = "6"; private const string sem = "7"; private const string vosem = "8"; private const string devyat = "9"; private const string nul = "0";
public Calc() { InitializeComponent(); // При запуске приложения на экране будет нуль txtOutput.Text = "0";
}
protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); }
Windows Form Designer generated code
[STAThread] static void Main() { Application.Run(new Calc()); } /// <summary> /// Обработчики для кнопок обращаются к методу chislonaEkrane класса ///mehanizmcalkulyatora /// и передают ему одну из постоянных (odin, dva, tri и т.д.). Результат, ///возвращаемый методом, /// присваивается свойству Text текстового поля txtOutput /// </summary>
private void btn1_Click(object sender, System.EventArgs e) { txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (odin); }
private void btn2_Click(object sender, System.EventArgs e) { txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (dva); }
private void btn3_Click(object sender, System.EventArgs e) { txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (tri); }
private void btn4_Click(object sender, System.EventArgs e) { txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (chetire); }
private void btn5_Click(object sender, System.EventArgs e) { txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (pyat); }
private void btn6_Click(object sender, System.EventArgs e) { txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (shest); }
private void btn7_Click(object sender, System.EventArgs e) { txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (sem); }
private void btn8_Click(object sender, System.EventArgs e) { txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (vosem); }
private void btn9_Click(object sender, System.EventArgs e) { txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (devyat); }
private void btn0_Click(object sender, System.EventArgs e) { txtOutput.Text = mehanizmcalkulyatora.chislonaEkrane (nul); }
private void btnChangesign_Click(object sender, System.EventArgs e) { txtOutput.Text = mehanizmcalkulyatora.ZnakChisla(); }
private void btnpoint_Click(object sender, System.EventArgs e) { txtOutput.Text = mehanizmcalkulyatora.ZnakTochki(); } /// <summary> /// Обработчики кнопок действия калькулятора передают /// методу DeystvieCalculatora класса mehanizmcalkulyatora ///переменную перечисления Deystvie /// </summary>
private void btn_delenie_Click(object sender, System.EventArgs e) { mehanizmcalkulyatora.DeystvieCalculatora (mehanizmcalkulyatora.Deystvie.Delenie); }
private void btn_umnojenie_Click(object sender, System.EventArgs e) { mehanizmcalkulyatora.DeystvieCalculatora (mehanizmcalkulyatora.Deystvie.Umnojenie); }
private void btn_minus_Click(object sender, System.EventArgs e) { mehanizmcalkulyatora.DeystvieCalculatora (mehanizmcalkulyatora.Deystvie.Vichitanie); }
private void btn_plus_Click(object sender, System.EventArgs e) { mehanizmcalkulyatora.DeystvieCalculatora (mehanizmcalkulyatora.Deystvie.Slojenie); }
private void btn_ravno_Click(object sender, System.EventArgs e) { txtOutput.Text = mehanizmcalkulyatora.ZnakRavno(); mehanizmcalkulyatora.Sbros(); }
private void btn_sbros_Click(object sender, System.EventArgs e) { mehanizmcalkulyatora.Sbros(); txtOutput.Text = "0"; } }
Листинг 1.9.
Закрыть окно

<?xml version="1.0" ?> <doc> <assembly> <name>Calculator</name> </assembly> <members> <member name="F:Calculator.Calc.odin"> <summary>Объявляем и инициализируем переменные, которые будут возникать на экране при нажатии соответствующих кнопок.</summary> </member> <member name="M:Calculator.Calc.Dispose(System.Boolean)"> <summary>Clean up any resources being used.</summary> </member> <member name="M:Calculator.Calc.InitializeComponent"> <summary>Required method for Designer support — do not modify the contents of this method with the code editor.</summary> </member> <member name="M:Calculator.Calc.Main"> <summary>The main entry point for the application.</summary> </member> <member name="M:Calculator.Calc.btn1_Click(System.Object,System.EventArgs)"> <summary>Обработчики для кнопок обращаются к методу chislonaEkrane класса mehanizmcalkulyatora и передают ему одну из постоянных (odin, dva, tri и т.д.). Результат, возвращаемый методом, присваивается свойству Text текстового поля txtOutput.</summary> </member> <member name="M:Calculator.Calc.btn_delenie_Click(System.Object,System.EventArgs)"> <summary>Обработчики кнопок действия калькулятора передают методу DeystvieCalculatora класса mehanizmcalkulyatora переменную перечисления Deystvie.</summary> </member> <member name="F:Calculator.mehanizmcalkulyatora.peremennayaMinus"> <summary>Объявляем и инициализируем переменную, которая будет использоваться для смены знака при нажатии клавиши (+/–)</summary> </member> <member name="F:Calculator.mehanizmcalkulyatora.resultatVichisleniy"> <summary>Объвляем переменные для работы калькулятора: resultatVichisleniy — переменная для хранения промежуточного результата в механизме калькулятора; resultatOutput — переменная, значение которой будет сниматься с экрана и выводиться на него; tekusheeDeystvieCalculatora — хранение одного из действий калькулятора; pervoeChislo — переменная, в которую будет записываться число на экране до нажатия на одну из четырех кнопок с действием; vtoroeChislo — второе число на экране; dobavlenierazryada — при добавлении следующего разряда эта переменная примет значение true; ChislosTochkoy — при добавлении десятичного разряда (знака точки) эта переменная примет значение true</summary> </member> <member name="M:Calculator.mehanizmcalkulyatora.#ctor"> <summary>В конструкторе класса mehanizmcalkulyatora инициализируем переменные ChislosTochkoy и dobavlenierazryada — при запуске калькулятора на экране нет ни разрядности, ни десятичной части.</summary> </member> <member name="M:Calculator.mehanizmcalkulyatora.chislonaEkrane(System.String)"> <summary>В этом методе переменная resultatOutput изменяется — при вводе числа ее значение перезаписывается.</summary> </member> <member name="M:Calculator.mehanizmcalkulyatora.DeystvieCalculatora(Calculator.mehanizmcalkulyatora.Deystvie)"> <summary>Метод, в котором определяется peremenDeystviya, — одно значение перечисления Deystvie, в зависимости от выбора клавиши +, –, *, или /</summary> </member> <member name="M:Calculator.mehanizmcalkulyatora.ZnakChisla"> <summary>При нажатии кнопки +/–- число на экране — tekusheeChislo умножается на –1, а затем результат снова присваивается переменной resultatOutput.</summary> </member> <member name="M:Calculator.mehanizmcalkulyatora.ZnakTochki"> <summary>При нажатии кнопки ( , ) переменная resultatOutput приобретает дробную часть.</summary> </member> <member name="M:Calculator.mehanizmcalkulyatora.ZnakRavno"> <summary>При нажатии кнопки ZnakRavno обрабатываются значения переменнных pervoeChislo и vtoroeChislo, результат присваивается переменной resultatVichisleniy, которая затем преобразуется в resultatOutput.</summary> </member> <member name="M:Calculator.mehanizmcalkulyatora.Sbros"> <summary>При нажатии кнопки С (сброс) значения переменных обнуляются.</summary> </member> <member name="T:Calculator.mehanizmcalkulyatora.Deystvie"> <summary>Создаем перечисление Deystvie для определения одного из четырех действий калькулятора.</summary> </member> </members> </doc>
Листинг 1.10.
Закрыть окно
Содержание раздела