Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2010, 06:49   #1
lexluter1988
Пользователь
 
Аватар для lexluter1988
 
Регистрация: 20.04.2010
Сообщений: 47
По умолчанию организовать взаимодействие между формами, как?

Добрый день. В проекте создана одна главная форма(родительская), одна дочерняя, и несколько модальных диалоговых (это те которые надо закрыть перед продолжением работы)
В этих диалогах вводятся определенные настройки (константы калибровки, параметры com-порта и тд)
Я организовал файловую структуру так -
1. при создании нового проекта создается каталог в папке с программой, а в том каталоге несколько файлов, хранящих настройки данного проекта.
И еще в каталоге с программой в файл config.txt записывается имя проекта, с которым работаем в данный момент.Чтобы остальные диалоги понимали откуда брать данные.
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace LEX_SpcPlz_ver1._0
{
    public partial class dialogBlinkProject : Form
    {
        public dialogBlinkProject()
        {
            InitializeComponent();
        }

        private void creatrButton_Click(object sender, EventArgs e)
        {
            string projectPath;
            string fileName;
            string filePath;
            string fileTxtPath;
            string fileConstPath;
            string filePortSett;
            string fileSpectrometr;

            fileName = projectName.Text;
            projectPath = fileName;
            if (projectPath.Length == 0)
            {
                MessageBox.Show("Введите имя файла");
            }
            else
            {
                Directory.CreateDirectory(projectPath);

                filePath = Path.Combine(projectPath, projectPath + ".lex");
                fileTxtPath = Path.Combine(projectPath, projectPath + "_comments" + ".txt");
                fileConstPath = Path.Combine(projectPath, projectPath + "_const" + ".txt");
                filePortSett = Path.Combine(projectPath, projectPath + "_port" + ".txt");
                fileSpectrometr = Path.Combine(projectPath, projectPath + "_spectr" + ".txt");


         //       File.Create(filePath);

                StreamWriter fileProjSettings       = new StreamWriter(filePath);
                fileProjSettings.Close();

                StreamWriter fileComments           = new StreamWriter(fileTxtPath);
                fileComments.Close();

                StreamWriter fileConstants          = new StreamWriter(fileConstPath);
                fileConstants.Close();

                StreamWriter fileDataPortSettings   = new StreamWriter(filePortSett);
                fileDataPortSettings.Close();

                StreamWriter fileSpectrSettings     = new StreamWriter(fileSpectrometr);
                fileSpectrSettings.Close();

                StreamWriter projectWeWorkNow       = new StreamWriter("config.txt");
                projectWeWorkNow.WriteLine(fileName);
                projectWeWorkNow.Close();

                Close();
            }

        }

    }
}
lexluter1988 вне форума Ответить с цитированием
Старый 21.05.2010, 06:49   #2
lexluter1988
Пользователь
 
Аватар для lexluter1988
 
Регистрация: 20.04.2010
Сообщений: 47
По умолчанию

Соответственно, к этим файлам можно обращаться, просто зная имя проекта, над которым работаем сейчас
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;


namespace LEX_SpcPlz_ver1._0
{
    public partial class dialogConstants : Form
    {
        public dialogConstants()
        {
            InitializeComponent();
        }
              
        private void saveCalibrationPoints_Click(object sender, EventArgs e)
        {
            // переменные обновленных данных
            string newPoint1;
            string newPoint2;
            string newPoint3;
            string newPoint4;

            // переменные, хранящие имя проекта и путь в его каталог
            string fName;
            string fPath;

            // присваиваем переменный значения
            // которые введены в текстовые поля
            newPoint1 = firstPoint.Text;
            newPoint2 = secondPoint.Text;
            newPoint3 = thirdPoint.Text;
            newPoint4 = fourthPoint.Text;

            // открываем файл конфигурации, в котором хранится имя проекта
            // над которым мы работаем в данный момент
            StreamReader fileName = new StreamReader("config.txt");

            // присваиваем переменной имя проекта
            fName = fileName.ReadLine();

            // формируем путь к каталогу проекта
            fPath = Path.Combine(fName, fName + "_const" + ".txt");

            // закрываем файл конфигурации, т.к. он больше не требуется
            fileName.Close();

            // открываем файл, хранящий константы калибровочной кривой
            StreamWriter fileConstants = new StreamWriter(fPath);
            

            // теперь записываем новые калибровочные точки
            fileConstants.WriteLine(newPoint1);
            fileConstants.WriteLine(newPoint2);
            fileConstants.WriteLine(newPoint3);
            fileConstants.WriteLine(newPoint4);


            fileConstants.Close();
            
            Close();
        }

        private void dialogConstants_Activated(object sender, EventArgs e)
        {
            // когда диалоговое окно настройки калибровки становится активным

            string point1;  // объявляем 4 переменные, в которых будут
            string point2;  // хранится значения калибровочных точек
            string point3;
            string point4;

            // переменные, хранящие имя проекта и путь в его каталог
            string fName;
            string fPath;

            // открываем файл конфигурации, в котором хранится имя проекта
            // над которым мы работаем в данный момент
            StreamReader fileName = new StreamReader("config.txt");

            // присваиваем переменной имя проекта
            fName = fileName.ReadLine();

            // формируем путь к каталогу проекта
            fPath = Path.Combine(fName, fName + "_const" + ".txt");

            // закрываем файл конфигурации, т.к. он больше не требуется
            fileName.Close();

            // открываем файл, хранящий константы калибровочной кривой
            StreamReader fileConstants = new StreamReader(fPath);

            // построчно читаем четыре калибровочные точки точки
            point1 = fileConstants.ReadLine();
            point2 = fileConstants.ReadLine();
            point3 = fileConstants.ReadLine();
            point4 = fileConstants.ReadLine();

            // текстовым полям присваиваем эти значения
            // чтобы при загрузке проекта пользователь
            // видел какие калибровочные точки присутствуют

            firstPoint.Text     = point1;
            secondPoint.Text    = point2;
            thirdPoint.Text     = point3;
            fourthPoint.Text    = point4;
            fileConstants.Close();         
           
          
        }
        // следующий код контролирует данные, вводимые пользователем в поля ввода
        // калибровочных точек
        private void firstPoint_Validating(object sender, CancelEventArgs e)
        {
            if (firstPoint.TextLength > 4)
            {
                errorSygnal.SetIconAlignment((Control)sender, ErrorIconAlignment.MiddleRight);
                errorSygnal.SetError((Control)sender, "Значение должно быть числовым и менее 6000");
                e.Cancel = true;    
                // в случае если данные не верны будет запрещено вводить в другие строки
            }
            else
            {
                errorSygnal.SetError((Control)sender, "");
            }            

        }     

       
    }
}
А теперь вопрос - нормально ли я организовал программу?
Может все значительно проще делается?
Как сделать так, чтобы можно было выбирать каталог проекта,
не используя SaveDialog
ps:спасибо за внимание
lexluter1988 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взаимодействие между формами Marsel737 Общие вопросы Delphi 5 16.11.2009 22:29
Связь между формами Arhangel_bes Помощь студентам 8 18.02.2009 15:30
данные между формами TaTT DoGG Общие вопросы .NET 13 04.12.2008 17:33
Связь между формами KiberJo Общие вопросы Delphi 20 22.07.2008 21:40