Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 30.10.2013
Сообщений: 17
1

Работа с несколькими формами

01.10.2015, 22:33. Показов 1148. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть две формы и класс, который присутствует в обеих. С первой формы(FormMain) вызывается вторая(FormRaz), в которой осуществляется запись и чтение файла. Подскажите, правильно ли составлен код, так как у меня проблема понимания классов, и я сомневаюсь в том ли месте их описываю. Заранее спасибо!
Первая форма:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
namespace WindowsFormsApplication1
{
    public class FirmR
    {
        public string name;
        public string Adres;
        public string Phone;
        public string Faks;
    }   
    public partial class FormMain : Form
    {
        private FirmR fr;       
        public FormMain()
        {
            InitializeComponent();
            fr = new FirmR();
            fr.name = "1 C";
            fr.Adres = " 123056, Россия, Москва, а/я 64";
            fr.Phone = "(495) 737-92-57";
            fr.Faks = "(495) 681-44-07";
        }
 
        private void buttonFirm_Click_1(object sender, EventArgs e)
        {
            FormRaz F = new FormRaz(fr);
            F.ShowDialog();
        }
    }
}
Вторая форма:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
namespace WindowsFormsApplication1
{
    public partial class FormRaz : Form
    {
        private FirmR localFirmR;
        public FormRaz(FirmR AFirmR)
        {
            InitializeComponent();
            localFirmR = AFirmR;
        }
 
        private void buttonSave_Click(object sender, EventArgs e)
        {
            localFirmR.name = textBoxNR.Text;
            localFirmR.Adres = textBoxAR.Text;
            localFirmR.Phone = textBoxTR.Text;
            localFirmR.Faks = textBoxFR.Text;
 
            FileInfo f = new FileInfo("Raz.txt");
            StreamWriter firm = f.CreateText();
            firm.WriteLine(localFirmR.name);
            firm.WriteLine(localFirmR.Adres);
            firm.WriteLine(localFirmR.Phone);
            firm.WriteLine(localFirmR.Faks);
            firm.Close();
        }
 
        private void FormRaz_Load(object sender, EventArgs e)
        {
            textBoxNR.Text = localFirmR.name;
            textBoxAR.Text = localFirmR.Adres;
            textBoxTR.Text = localFirmR.Phone;
            textBoxFR.Text = localFirmR.Faks;
 
            FileInfo f = new FileInfo("Raz.txt");
            if (f.Exists)
            {
                StreamReader firm = f.OpenText();
                localFirmR.name = firm.ReadLine();
                localFirmR.Adres = firm.ReadLine();
                localFirmR.Phone = firm.ReadLine();
                localFirmR.Faks = firm.ReadLine();
                firm.Close();
            }
            else
            {
                MessageBox.Show("Файл не существует", "Ошибка",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2015, 22:33
Ответы с готовыми решениями:

Работа с несколькими формами
У меня вопрос.Сразу скажу что из всех этих форм,главной формы нет,она уже давно спрятана и не нужна...

Работа классов в приложении с несколькими формами
Предположим что есть приложение выполненное в WinForms. В данном приложении используется одна...

Реализация данных с несколькими формами
Здравствуйте. Подскажите, пожалуйста, как лучше сделать в моём случае. Через меню будет...

Использование notifyIcon между несколькими формами
Кто знает как можно создать notifyIcon чтоб при переключении двумя и несколькими формами не...

3
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
01.10.2015, 23:26 2
C#
1
2
3
4
firm.WriteLine(localFirmR.name);
firm.WriteLine(localFirmR.Adres);
firm.WriteLine(localFirmR.Phone);
firm.WriteLine(localFirmR.Faks);
Вместо подобных длинных конструкций вы бы лучше сделали классу FirmR пару методов(WriteToFile(string filename){},ReadFromFile(string filename){} к примеру), которые бы считывали/записывали в файл, а так же определили в нем конструктор, принимающий на вход данные для всех 4ех полей. Так же разумно было бы телефон оформить как свойство, и в сеттере сверять его с регулярным выражением,дабы он соответствовал нужному формату. Тогда бы выглядело красивее и потянуло на большую оценку. Да, и используйте теги C# и форматирование кода, глаза режет ужасно.
0
157 / 156 / 104
Регистрация: 01.10.2015
Сообщений: 310
02.10.2015, 10:17 3
AnnTIKH, с пониманием классов у Вас все в порядке А то, что Вы заботитесь о качестве написания своего кода – огромный плюс!
EvilFromHell дал исчерпывающий совет написания. Я решил расписать все то, что он сказал и дополнить некоторые места. Все разъяснения в комментариях к коду. Если что-то не понятно – спрашивайте!
  • Класс FirmR:
    Кликните здесь для просмотра всего текста
    C#
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    
    public class FirmR
    {
        /// <summary>Название фирмы.</summary>
        public string Name { get; set; }
        /// <summary>Адрес фирмы.</summary>
        public string Adres { get; set; }
     
        private string sPhone = string.Empty;
        /// <summary>Номер телеофна фирмы.</summary>
        public string Phone
        {
            get
            {
                return sPhone;
            }
            set
            {
                // Проверяем введенный номер телефона на корректность
                if (!Regex.IsMatch(value, @"^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$"))
                    throw new FormatException("Введите корректный номер телефона.");
                sPhone = value;
            }
        }
        /// <summary>Факс фирмы.</summary>
        public string Faks { get; set; }
     
        /// <summary>Инициализирует новый экземпляр класса FirmR.</summary>
        public FirmR()
        {
            // Стандартный конструктор класса
        }
     
        /// <summary>
        /// Инициализирует новый экземпляр класса FirmR.
        /// </summary>
        /// <param name="name">Название фирмы.</param>
        /// <param name="address">Адрес фирмы.</param>
        /// <param name="phone">Номер телефона фирмы.</param>
        /// <param name="fax">Факс фирмы.</param>
        public FirmR(string name, string address, string phone, string fax)
        {
            Name = String.Copy(name);
            Adres = String.Copy(address);
            Phone = String.Copy(phone);
            Faks = String.Copy(fax);
        }
     
        /// <summary>
        /// Выполняет сохранение данных о фирме.
        /// </summary>
        /// <param name="name">Название фирмы.</param>
        /// <param name="address">Адрес фирмы.</param>
        /// <param name="phone">Номер телефона фирмы.</param>
        /// <param name="fax">Факс фирмы.</param>
        public void Save(string name, string address, string phone, string fax)
        {
            Name = String.Copy(name);
            Adres = String.Copy(address);
            Phone = String.Copy(phone);
            Faks = String.Copy(fax);
        }
     
        /// <summary>
        /// Записывает в указанный файл данные о фирме.
        /// </summary>
        /// <param name="path">Путь к файлу для записи.</param>
        public void WriteToFile(string path)
        {
            FileInfo f = new FileInfo(path);
            StreamWriter firm = f.CreateText();
            firm.WriteLine(Name);
            firm.WriteLine(Adres);
            firm.WriteLine(Phone);
            firm.WriteLine(Faks);
            firm.Close();
        }
     
        /// <summary>
        /// Выполняет чтение данных о фирме из файла.
        /// </summary>
        //// <param name="path">Путь к файлу для записи.</param>
        public void ReadFromFile(string path)
        {
            FileInfo f = new FileInfo(path);
            if (!f.Exists) throw new Exception("Файл не существует");
     
            StreamReader firm = f.OpenText();
            Name = firm.ReadLine();
            Adres = firm.ReadLine();
            Phone = firm.ReadLine();
            Faks = firm.ReadLine();
            firm.Close();
        }
    }

  • Главная форма FormMain:
    Кликните здесь для просмотра всего текста
    C#
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    public partial class FormMain : Form
    {
        private FirmR fr;
     
        public FormMain()
        {
            InitializeComponent();
            // Сразу заполняем объект нужной информацией благодаря конструктору
            fr = new FirmR("1 C", " 123056, Россия, Москва, а/я 64", "(495) 737-92-57", "(495) 681-44-07");
        }
     
        private void button1_Click(object sender, EventArgs e)
        {
            FormRaz F = new FormRaz(fr);
            F.ShowDialog();
        }
    }

  • Форма FormRaz:
    Кликните здесь для просмотра всего текста
    C#
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    
    public partial class FormRaz : Form
    {
        public FormRaz(FirmR AFirmR)
        {
            InitializeComponent();
            localFirmR = AFirmR;
        }
     
        private FirmR localFirmR;
     
        private void buttonSave_Click(object sender, EventArgs e)
        {
            try
            {
                // Сохраняем через метод Save
                localFirmR.Save(textBoxNR.Text, textBoxAR.Text, textBoxTR.Text, textBoxFR.Text);
                // Записываем в файл с адресом через метод WriteToFile
                localFirmR.WriteToFile("D:\\temp.txt");
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
     
        private void FormRaz_Load(object sender, EventArgs e)
        {
            try
            {
                // Загружаем из файла с адресом через метод ReadFromFile.
                localFirmR.ReadFromFile("D:\\temp.txt");
     
                // Выводим свойства на форму
                /* Тоже можно сделать через функцию, если необходимо*/
                localFirmR.Name = textBoxNR.Text;
                localFirmR.Adres = textBoxAR.Text;
                localFirmR.Phone = textBoxTR.Text;
                localFirmR.Faks = textBoxFR.Text;
            }
            catch(Exception ex)
            {
                //MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }

Регулярное выражение для проверки корректности введенного телефонного номера взято с habrahabr.ru
0
0 / 0 / 0
Регистрация: 30.10.2013
Сообщений: 17
02.10.2015, 10:49  [ТС] 4
Спасибо большое!
0
02.10.2015, 10:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.10.2015, 10:49
Помогаю со студенческими работами здесь

Как переключаться между несколькими формами?
у меня в приложении несколько форм, как мне между ними переключаться?

Открытие формы несколькими формами и передача методов и данных этой форме
Добрый день, уважаемые форумчане! Сломал себе у же всю голову, но не могу решить вот такой вопрос....

Передача данных между несколькими формами и отображение "на лету"
Здравствуйте. Пытаюсь решить следующую задачу. Есть три формы. На форм1 текстбокс и две кнопки,...

Работа с формами
Помогите, пожалуйста, у меня есть 2 формы, из первой во вторую форму заходит через меню. На второй...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru