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

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

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

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

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

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

4 Solutions collect form web for “Как изменить Form1 label.text при установке флажка на form2?”

Вы можете подписаться на событие 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 select
  • Подпись к событию в .NET. Использование сильного напечатанного «Отправителя»?
  • Пользовательские события GWT
  • Определите, будет ли пользователь щелкать полосу прокрутки или содержимое (onclick для собственной полосы прокрутки)
  • Реализация сканера штрих-кода на Java
  • Мышь родительского контроля Ввод / выключение событий с помощью детского контроля
  • Событие Click не работает с динамически сгенерированными элементами
  • Как получить событие click ONLY только для родительского DIV, а не для детей?
  • Каковы различия между делегатами и событиями?
  • Как удалить обработчик события lambda
  • Jquery добавляет прослушиватели событий к динамически добавленным элементам
  • Interesting Posts

    Почему компилятор C # испускает инструкцию callvirt для вызова метода GetType ()?

    Как я могу обработать нажатие кнопки ImeOptions?

    что именно делает метод Activity.finish ()?

    Где в рабочей области Eclipse находится список сохраненных проектов?

    Как я могу запросить папку назначения в пакетном файле?

    Команды командной строки запуска

    как получить список баз данных «Схема» имен MySql с помощью java JDBC

    Какова версия командной строки Windows 7 для удаления всех паролей помнить в Credential Manager?

    Какой диапазон чисел может быть представлен в 16-, 32- и 64-битных системах IEEE-754?

    отправка сообщения на chrome-расширение с веб-страницы

    ProcessBuilder: пересылка stdout и stderr запущенных процессов без блокировки основного streamа

    Загрузка DLL в отдельный AppDomain

    Жесткий сброс USB в Ubuntu 10.04

    Как параметризовать @Scheduled (fixedDelay) с языком выражения Spring 3.0?

    Самый простой способ чтения из URL-адреса в строку в .NET.

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