Как изменить Form1 label.text при установке флажка на form2?

Я очень новичок в c #, и я пробую свои первые эксперименты с двумя разными формами.

Я бы хотел, чтобы у вас была метка1 и кнопка1 в Form1, и флажок1 на Form2.

кнопка1 в Form1 открывает Form2, и как только вы установите флажок1 на Form2, текст в label1 изменится.

Я думаю, что это нужно делать с помощью событий, но события – это единственное, что до сих пор меня действительно путало, поэтому я предполагаю, что в основном этот вопрос связан с использованием событий. Который я также нахожу ужасно запутанным, если я смотрю это на MSDN и других веб-сайтах.

Помощь очень ценится, это заставляет меня чувствовать себя очень глупо.

Вы можете подписаться на событие CheckedChanged из флажка в экземпляре Form2 непосредственно из экземпляра Form1. Внутри Form1, перед тем как отобразить Form2, подписаться на событие CheckedChanged этого флажка

Form2 frm = new Form2(); frm.chkBox1.CheckedChanged += new EventHandler(this.ReceiveCheckedChanged); frm2.ShowDialog(); 

и затем определите в Form1 (this) обработчик для события checkedChanged, поднятого в Form2

 private void ReceiveCheckedChanged(object sender, EventArgs e) { CheckBox chk = sender as CheckBox; if(chk.Checked) this.label1.Text = "Checked"; else this.label1.Text = "UnChecked"; } 

для этого вам нужно изменить Modifiers свойств на флажке от Private to Public

Таким образом, Form2 не должен знать, что существует Form1, и каждый раз, когда кто-то нажимает на этот флажок, вам нужно изменить ярлык в другой форме. Ответственность за изменение внутреннего состояния (текст на этикетке) находится на Form1, который уведомил систему о своих требованиях.

В этом случае вы можете использовать событие CheckedChanged :

 public void checkbox2_CheckedChanged(object sender, EventArgs e) { if (checkbox2.Checked) { Form1.Label1.Text = "Checkbox 2 has been checked"; } else { Form1.Label1.Text = ""; } } 

http://www.c-sharpcorner.com/uploadfile/mahesh/checkbox-in-C-Sharp3/

Обратите внимание, что вам придется изменить модификатор доступа в Form1 и сделать Label1 общедоступным, чтобы Form2 мог изменять свойство Text .

Для этого перейдите к Form1 , выберите Label1 goto Properties , выберите « Modifiers и измените его с « Private на Public . Форма 2 будет иметь доступ к Label .

Использование controllerа и событий для развязки форм

Правильный способ сделать это – разделить две формы друг от друга, введя class Controller и используя events для изменения состояния сигнала.

Вот пример.

Во-первых, создайте новое стандартное приложение Windows Forms под названием WindowsFormsApplication1 и добавьте две формы: form1 и form2 .

Затем добавьте в форму 1 кнопку под названием «button1» и метку «label1».

Затем добавьте в form2 флажок «checkbox1».

В конструкторе form1 дважды щелкните по кнопке, чтобы добавить для него обработчик кликов.

В конструкторе form2 дважды щелкните этот флажок, чтобы добавить для него обработчик изменений.

Теперь добавьте новый class под названием «Контроллер» и добавьте к нему следующий код:

 using System; using System.Windows.Forms; namespace WindowsFormsApplication1 { internal sealed class Controller { public void RunForm1() { _form1 = new Form1(); // The next line defines our response to the button being pressed in Form1 _form1.ButtonClicked += (sender, args) => showForm2(); Application.Run(_form1); } private void showForm2() { var form2 = new Form2(); // The next line defines our response to the checkbox changing in Form2. form2.CheckBoxChanged += (sender, args) => _form1.SetLabel("Checkbox = " + ((CheckBox)sender).Checked); form2.ShowDialog(_form1); } private Form1 _form1 ; } } 

Теперь измените Form1.cs на это:

 using System; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1: Form { // Here's where we announce our event handler to the world: public event EventHandler ButtonClicked; public Form1() { InitializeComponent(); } public void SetLabel(string text) { label1.Text = text; } private void button1_Click(object sender, EventArgs e) { // We make a copy of ButtonClicked before checking it for null because // in a multithreaded environment some other thread could change it to null // just after we checked it for nullness but before we call it, which would // cause a null reference exception. // A copy cannot be changed by another thread, so that's safe to use: var handler = ButtonClicked; if (handler != null) handler(sender, e); } } } 

И измените Form2.cs на это:

 using System; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form2: Form { // Here's the event handler for the check box: public event EventHandler CheckBoxChanged; public Form2() { InitializeComponent(); } private void checkBox1_CheckedChanged(object sender, EventArgs e) { var handler = CheckBoxChanged; if (handler != null) handler(sender, e); } } } 

Наконец, смените Program.cs на это:

 using System; using System.Windows.Forms; namespace WindowsFormsApplication1 { static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Controller controller = new Controller(); controller.RunForm1(); } } } 

Теперь запустите программу и нажмите кнопку, а затем установите флажок несколько раз. Вы увидите ярлык в Form1.

Таким образом, вы полностью отделили Form1 от Form2 и поместили логику управления в отдельный class controllerа.

Form1:

 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { var form = new Form2(); form.Changed += (o, args) => label1.Text = "some"; form.ShowDialog(); } } 

Form2:

 public partial class Form2 : Form { public delegate void ChangedEventHandler(object sender, EventArgs e); public event ChangedEventHandler Changed; public Form2() { InitializeComponent(); } private void checkBox1_CheckedChanged(object sender, EventArgs e) { if (Changed != null) { Changed(this, e); } } } 

Используйте CheckedChanged событие CheckBox.

Кроме того, вы можете ознакомиться с хорошим руководством по использованию событий в C #.

  • Как я могу вызвать событие рисования?
  • Jquery добавляет прослушиватели событий к динамически добавленным элементам
  • CKEDITOR - как добавить постоянное событие onclick?
  • Когда используется пул streamов?
  • Как я могу отменить регистрацию «анонимного» обработчика событий
  • Событие Internet Explorer и JavaScript currentTarget
  • ActionListener для конкретного текста внутри JTextArea?
  • Android Spinner: Получить выбранное событие изменения элемента
  • Когда происходит событие «размытия», как я могу узнать, какой элемент фокуса пошел * на *?
  • Как получить событие click ONLY только для родительского DIV, а не для детей?
  • Проверка на нуль до отправки события ... streamобезопасная?
  • Interesting Posts

    Доступ к HttpContext.Current из разных streamов

    Как очистить переменную stringstream?

    Можете ли вы прорваться от Groovy «каждого» закрытия?

    Что такое route.IgnoreRoute (“{resource} .axd / {* pathInfo}”)

    Mysql подсчитывает экземпляры подстроки, затем упорядочивает

    Ионный 2: Кордова недоступна. Обязательно включите cordova.js или запустите в устройстве / симуляторе (работает в эмуляторе)

    Как создать баланс аккаунта для всех пользователей в системе asterisk freePBX?

    Какое программное обеспечение хорошо работает для просмотра массивных изображений TIFF в Windows 7?

    Можно resize 0 (ноль)

    Суммирование нескольких ячеек, соответствующих критериям столбца и столбца?

    Итеративный DFS vs Рекурсивный порядок DFS и разных элементов

    Лучший способ поддерживать данные «application / x-www-form-urlencoded» с WCF?

    Как искать и заменять строку в нескольких xml-файлах (внутри каталога) с помощью Windows CMD

    Как я могу автовоспроизвести видео с помощью нового стиля встраиваемого кода для Youtube?

    Преобразование MSDN Установка Windows 7 Enterprise в Ultimate

    Давайте будем гением компьютера.