Как передать значение переменной из одной формы в другую c
Перейти к содержимому

Как передать значение переменной из одной формы в другую c

  • автор:

Как передать переменную из первой форму в форму 3

Я начинаю изучать C#, делаю простенькие программы и учусь на этом ) Я создал две формы Form1 и Form3 , пытаюсь передать значение radioButton , которое может быть true или false . Код Form1:

public partial class Form1 : Form < public Form1() < InitializeComponent(); >public void Otvet1_Click(object sender, EventArgs e) < if (VariantNeVern1.Checked || VariantNeVern2.Checked || VariantVern.Checked) < Hide(); Form2 Vopros = new Form2(); Vopros.ShowDialog(); >else MessageBox.Show("Выбирите ответ"); Close(); > private void VariantNeVern1_CheckedChanged(object sender, EventArgs e) < Form3 Vopros = new Form3(); Vopros.Owner = this; >> 
public partial class Form3 : Form < public Form3() < InitializeComponent(); Form1 main = new Form1(); Rezult.Text = Convert.ToString(main.VariantNeVern1);//тут косяк >private void CloseTest_Click(object sender, EventArgs e) < Close(); >> 

Я должен получить результат true или false , чтобы убедиться работает или нет, постоянно получаю false , а по логике — если я выделил radioButton с именем VariantNeVern1 , должен получить true .

Отслеживать
20.2k 6 6 золотых знаков 37 37 серебряных знаков 81 81 бронзовый знак
задан 2 авг 2017 в 15:28
3 1 1 серебряный знак 2 2 бронзовых знака
Почитай про свойства и что это такое.
3 авг 2017 в 7:07

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

У тебя пока проблемы с ООП.

Form1 main = new Form1(); // на самом деле, косяк тут Rezult.Text = Convert.ToString(main.VariantNeVern1);//тут не косяк 

Ты создаёшь новый объект типа Form1. Он не имеет никакого отношения к главной форме твоего приложения. Соответственно, все контролы в нём находятся в начальном состоянии и ты передаёшь всегда False. Если это не случайная ошибка, рекомендую начать с консольного приложения, но с хорошей объектной моделью и кучей маленьких классиков, каждый из которых имеет свою область ответственности. После этого возвращайся в мир UI.

Если говорить о WinForms, то на дворе 2017. И если есть желание развиваться в направлении UI, рекомендую начать сразу с WPF.

Если говорить о самом способе передачи элемента управления, то в мире UI так не делают. Есть несколько основных шаблонов проектирования, которых стараются придерживаться (только без фанатизма). Например MVC (модель, представление, контроллер) и MVVMC (модель, модель представления, представление, контроллер).

В твоём случае не хватает именно класса модели, которая хранит определенные состояния. Важно понимать, что если ты не пишешь редактор интерфейса, то тебе не нужно передавать между формами кнопку. Тебе нужно передать некоторый режим работы, за который она отвечает.

public enum Variants

Эти состояния хранятся в некотором модельном классе, контексте, который шарится между всеми желающими.

public class Model < public Variants CurrentVariant > 

И вот эту модель ты один раз инициализируешь, а затем передаешь во все формы, которые должны общаться между собой (на самом деле, обычно, передаёшь контроллер — более умную сущность, которая содержит не только данные, но и некоторые операции, действия, но об этом ты прочитаешь в гугле по запросу MVC).

Model model = new Model(); Form1 form1 = new Form1(model); Form2 form2 = new Form2(model); 

А они уже её используют и сохраняют в ней сотояние кнопки, не как «Checked», а как конкретное состояние системы.

public partial class Form1 : Form < private readonly Model _model; public Form1(Model model) < _model = model; >private void VariantNeVern1_CheckedChanged(object sender, EventArgs e) < bool isChecked = VariantNeVern1.Checked; Variants variant = isChecked ? Variants.Incorrect : Variants.Correct; _model.CurrentVariant = variant; >> 

Соответственно вторая форма может получить доступ к этому значению.

В какой момент создавать формы и как передать между ними модель данных или контроллер — это та самая проблема, ради которой и придумывают шаблоны проектирования.

Прочитай про MVC, большая часть вопросов отпадёт. Если перейдёшь на WPF, прочитай про Binding и INotifyPropertyChanged. Когда освоишься, можешь посмотреть в сторону более строгого и тяжеловестного MVVMC.

Ну а в рамках твоего примера, можешь либо создать обе формы вначале, а затем отображать и скрывать их методами Show и Hide, при этом во второй подпишись на событие Shown и в этот момент считывай значение из модели; либо создавать вторую форму внутри первой и передавать модель из неё, тогда инициализацию своего «Rezult» ты можешь оставить в конструкторе, опять же, получая значение из модели.

Надеюсь, что смог помочь, а не только запутать.

Передача значения переменной из одной формы в другую

Функция одной и нескольких переменных

1. Передача значения переменной из одной формы в другую

2.

2
C#
Часто возникает
необходимость передать
определённые параметры
между формами в одном
приложении, например
значения каких либо
переменных, или
запустить какую либо
процедуру или функцию в
другой форме

3.

Первый способ
3
1. Объявить глобальную статическую
переменную;
2. Определить значение переменной;
3. Вторая форма;
4. На второй форме прочитать
перемеренную так
Form1.переменная
5. Выполнять с ней работу.
C#

4.

Первый способ
4
C#

5.

Первый способ
5
1
2
3
C#

6.

Первый способ
6
4
5
C#

7.

8.

9.

10.

Первый способ
10
C#
1. Объявить переменную на 1 форме;
2. Предать переменную 2 форме
Form2 f2 = new Form2(переменная);
f2.Show();
3. Объявить переменную на 2 форме
4. В конструкторе 2 формы определить
переменную от 1 формы
5. Присвоить переменную 2 формы
значение переменной 1 формы, …

Как передать значение переменной из одной формы в другую c

На форме нужно сделать, что то типа того:

Form1.Label1.Text = Form2.Label1.Text;

Так было в Delphi, а как с этим здесь?

Win 10 x64 | VS 2015 | MSSQL 2014
autovestitv.ru

Участник клуба Подтвердите свой е-майл

Регистрация: 14.12.2007

Сообщений: 1,434

Что бы получить доступ к компоненту другой формы нужно сделать этот компонент public.

Открываем исходник дизайнера формы Form1.Designer.cs, ищим строку (у меня кнопка)

private System.Windows.Forms.Button button1;

и меняем на

public System.Windows.Forms.Button button1;
Form1 child = new Form1(); child.button1.Text = "sdgsdg"; child.Show();

Проповедую design patterns, верую в MVC, доверяю eXtrime programming.

Как передать значение переменной из одной формы в другую?

Если нужно передавать в существующую форму без создания новой, можно сохранять переменную в каком-нибудь static классе, либо в properties.

Ответ написан более трёх лет назад

Комментировать

Нравится Комментировать

Ответы на вопрос 1

petermzg

Самый лучший программист

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *