Делегаты или вызов метода класса из другого класса - C#
Формулировка задачи:
Добрый день!
В попытке изучения c# наткнулся на такую проблему:
1. Зачем нужен делегат? Ведь я могу вызвать метод класса из другого класса и без него!
2. Вызывая метод делегатом или методом класса я могу только передать данные, но не изменить что-либо на форме?
Для проверки создал форму и кинул на нее 2 кнопки, richBox, label
При нажатии кнопки №2 должно вызываться изменение label1, вноситься запись в richBox и создаваться messageBox, но выполняется только последнее. Почему?
Помогите, пожалуйста, разобраться
using System; using System.Windows.Forms; using System.Threading; using System.Linq; namespace TestDelegate { public partial class MainForm : Form { public MainForm() { InitializeComponent(); DataDelegat.EventHandler = new DataDelegat.MyEvent(labTXT); } void Button1Click(object sender, EventArgs e) // Кнопка для очистки полей { richTextBox1.Text = ""; label1.Text = "empty"; } public void labTXT (string strLab) // Метод, который будет выполняться из класса "TestDel" // через делегат и через "main.labTXT(str)" { label1.Text = strLab; richTextBox1.Text += strLab; checkBox1.Checked = false; MessageBox.Show(strLab); } void Button2Click(object sender, EventArgs e) // Вызываем метод соседнего класса { TestDel.methodTestDel(0, true); } } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ static class TestDel { public static void methodTestDel(int num, bool flag) { MainForm main = new MainForm(); while (flag) { string str = num.ToString(); string str1 = (num*2).ToString(); num++; Thread.Sleep(100); DataDelegat.EventHandler(str); // Вызываем метод класса Main делегатом main.labTXT(str); // Вызываем метод класса Main "напрямую" if (num > 3) flag = false; // завершаем цикл } } } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ public static class DataDelegat // Отдельный класс для делегата { public delegate void MyEvent(string data); public static MyEvent EventHandler; } }
Решение задачи: «Делегаты или вызов метода класса из другого класса»
textual
Листинг программы
public static void methodTestDel(int num, bool flag, MainForm mainRef) { MainForm main = mainRef; //...
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д