две формы и передача данных между ними
От: AWRoraInc Украина  
Дата: 15.01.06 12:08
Оценка:
Как правильно и красиво, с точки зрения ООП в разрезе C#.Net,
передать значение из одной формы в другую?

Например:
моя mdiForm вызывает Form2.
в Form2 юзер делает выбор в radioButton и нажимает кнопку Ok и Form2 выгружается.
в mdiForm я хочу знать которую из radioButton в Form2 выбрал юзер.
Думаю, что объявление public переменной в mdiForm не самый правильный
и красивый способ решения этой простой задачи.

Подскажите альтернативу, плиз
@VRora
Re: две формы и передача данных между ними
От: Retran Россия  
Дата: 16.01.06 06:13
Оценка:
Здравствуйте, AWRoraInc, Вы писали:

AWR>Как правильно и красиво, с точки зрения ООП в разрезе C#.Net,

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

AWR>Например:

AWR>моя mdiForm вызывает Form2.
AWR>в Form2 юзер делает выбор в radioButton и нажимает кнопку Ok и Form2 выгружается.
AWR>в mdiForm я хочу знать которую из radioButton в Form2 выбрал юзер.
AWR>Думаю, что объявление public переменной в mdiForm не самый правильный
AWR>и красивый способ решения этой простой задачи.

AWR>Подскажите альтернативу, плиз


Я обычно делаю что-нибудь в стиле:

В Form2:

...      
private int _result;
public int Result
{
    get
    {
    return _result;
    }
    set
    {
    _result = value;
    }
}

private void button1_Click(object sender, EventArgs e)
{
    if (radioButton1.Checked) _result = 1;
    ...
    this.Close();
}
...


В Form1:

...
private void button1_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.ShowDialog();
    switch (form2.Result)
    {
        case 1: 
            /* что-нибудь делаем */
            break;
        default:
            /* и так далее */
            break;
    }
}
...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
две формы и передача данных между ними
От: Аноним  
Дата: 15.01.06 12:11
Оценка:
Как передать параметры между формами?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: а если не открывать второе окно как модальное?
От: AWRoraInc Украина  
Дата: 18.01.06 11:36
Оценка:
Спасибо за примеры, но там второе окно открывается как модальное.
А вот у меня случай другой:
MDI_Form открывает дочернее окно (Child_Form) в котором юзер делает выбор.
После этого выбора должны инициализироваться некоторые переменные
(например Connection к базе данных и ряд других),
которые я хочу использовать потом глобально во всем проекте.

Как поступить лучше, красиво и правильно в таком случае с точки зрения C# .Net?
@VRora
Re[2]: а если не открывать второе окно как модальное?
От: Retran Россия  
Дата: 18.01.06 22:37
Оценка:
Здравствуйте, AWRoraInc, Вы писали:

AWR>Спасибо за примеры, но там второе окно открывается как модальное.

AWR>А вот у меня случай другой:
AWR>MDI_Form открывает дочернее окно (Child_Form) в котором юзер делает выбор.
AWR>После этого выбора должны инициализироваться некоторые переменные
AWR>(например Connection к базе данных и ряд других),
AWR>которые я хочу использовать потом глобально во всем проекте.

AWR>Как поступить лучше, красиво и правильно в таком случае с точки зрения C# .Net?


А в дочернем окне ведется редактирование какого-либо документа?
Или просто выбор опций с присвоением значений переменным после нажатия на Ok? Во-втором случае правильнее открывать окно именно модально.

Если я тебя правильно понял, то есть такая мысля:

Объявить некий статический класс со статическими полями, которые будут хранить твои переменные, и обращаться к нему напрямую из
обработчиков контролов на дочерней форме.

Globals.cs
using System;

namespace WindowsApplication1
{
    static class Globals
    {
        private static string _field;
        public static string Field
        {
            get { return _field; }
            set { _field = value; }
        }        
    }
}


ChildForm.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class ChildForm : Form
    {
        public ChildForm()
        {
            InitializeComponent();
        }
        private void radioButton_Click(object sender, EventArgs e)
        {
            Globals.Field = ((RadioButton)sender).Text;
        }
    }
}


Вообще более правильно с точки зрения ООП сделать класс Globals нестатическим, создать конкретный объект в главной форме и передать ссылки на него дочерним формам через их конструкторы. Но это гораздо геморройнее

Кстати в готдотнетовском факе(см. пост Сергея) есть пример с немодальными формами. Но там значения переменным тоже присваиваются именно при закрытии формы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: а если не открывать второе окно как модальное?
От: IT Россия linq2db.com
Дата: 18.01.06 22:50
Оценка:
Здравствуйте, AWRoraInc, Вы писали:

AWR>После этого выбора должны инициализироваться некоторые переменные

AWR>(например Connection к базе данных и ряд других),
AWR>которые я хочу использовать потом глобально во всем проекте.

AWR>Как поступить лучше, красиво и правильно в таком случае с точки зрения C# .Net?


Сохрани это всё в переменных, из которых ты это будешь использовать глобально, и затем вызови событие, чтобы обновились все заинтересованные подписчики.
Если нам не помогут, то мы тоже никого не пощадим.
Re[3]: а если не открывать второе окно как модальное?
От: Retran Россия  
Дата: 18.01.06 23:07
Оценка:
Приветствую!

Спросонья не вспомнил, что тебе собственно надо.
Тебе надо подписать mdiForm на эвент Closed формы Form2 и в его обработчике инциализировать свои переменные.
Пример есть по ссылке в посте Сергея.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.