Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] С++ Builder | Обновление Form2

Ответить
Настройки темы
C/C++ - [решено] С++ Builder | Обновление Form2

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Ребята, такой простой вопрос... Создал две формы, всё отлично, но вот загвоздка, по кнопке "Показать решение" - вызывается вторая форма Form2 на ней есть Label1, куда и выводится решение. Всё данные типа int объявлены в файле .h первой формы, в секции private:. Когда изменяется значение результата, нужно НЕ закрывать Form2, а потом заново жать "Показать решение", а по нажатию кнопки "Обновить" расположенной на Form2, как-то заставить обновиться результат
Есть такой код, но наверное он не тот...


InvalidateRect(0, NULL, true);



И второй вопрос: У меня две формы... с формы один на форму два
Form2->Label1->Caption = "........ здесь вывод....."; - выводится, всё в порядке, а как добраться до данных, которые в секции private: файле.h Form1, с Form2. Правильно ли будет создать функцию-друг getValue(); и через неё?

Отправлено: 14:41, 13-08-2006

 

Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Drongo
Собственно не совсем понятно что и куда,но...
Цитата:
Есть такой код, но наверное он не тот...

InvalidateRect(0, NULL, true);
...а если взять функцию UpdateWindow??

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 15:51, 15-08-2006 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Вопрос вот какой:
Есть Form1
В Form1.h объявлены в секции private: int a, b, c; // некоторые данные
на форме есть компоненты

Edit1 - на Form1 ввод первого числа.
Edit2 - на Form1 ввод второго числа.
Label1 - на Form1, если в расчётах не используются 7-значные и более цифры.
Button1 - на Form1, кнопка производит расчёт и выводит на Label1 результат и решение, у меня называется она "Показать решение".
CheckBox1 - на Form1, если не выбран значит вывести на Form1, если выбран, создать Form2 и вывести на неё.

Button1 - эта кнопка выводит решение на Label1. Вот функция:
читать дальше »
Код: Выделить весь код
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	a = Edit1->Text.ToInt();	//конверт в число a 
	b = Edit2->Text.ToInt();	//конверт в число b
	
	c = a + b;	//сложение 

	if(CheckBox1->Checked){
                  Form2 = new TForm2(this);
                  Form2->Show();
                  Form2->Label1->Caption = String(a) + " + " + String(b) + " = " + String(c);	//вывод  на Form2 
               }
	else
	     Form1->Label1->Caption = String(a) + " + " + String(b) + " = " + String(c);	//вывод на Form1 
}

Всё работает! Форма создаётся, решение выводится, но загвоздка вот в чём...
Поскольку потенциальный юзер опять вводит данные, то и само собой меняются введённые цифры и результат расчёта!

На Form2 такие компоненты:
Button1 - кнопка обновить результат "Обновить"
Button2 - кнопка выхода "Выход"
Label1 - куда выводится решение

Жать кнопку выход, а потом заново, "Показать решение" не привлекает! А как сделать, чтобы при нажатии на кнопку "Обновить" на Form2 решение обновлялось? Посоветовали UpdateWindows(), (Ею пользоваться не умею!!!), но там возвращается тип int , а если нужно несколько? Как её правильно вызвать и то ли это? Я ещё вот что придумал, подскажите правильно ли, или есть более простое решение:

В Form1.h в секции public: объявил функцию GetValue(); //Пользовательская фунция
В этой функции поместить всё то, что было в обработчике Button1 на Form1

читать дальше »
Код: Выделить весь код
//это в Form1 описание Button1  "Показать решение"-------------------------
void __fastcall TForm1::Button1Click(TObject* Sender)
{
	GetValue();
}

// это в Form1 описание GetValue()   -----------------------------------
void __fastcall TForm1::GetValue()
{
 	a = Edit1->Text.ToInt();	//конверт в число a 
	b = Edit2->Text.ToInt();	//конверт в число b
	
	c = a + b;	//сложение 

	if(CheckBox1->Checked){
                  Form2 = new TForm2(this);
                  Form2->Show();
                  Form2->Label1->Caption = String(a) + " + " + String(b) + " = " + String(c);	//вывод  на Form2 
               }
	else
	     Form1->Label1->Caption = String(a)+"  +  "+String(b)+"  =  "+String(c);	//вывод на Form1   
}
//-------------------------------------------------------------------

и потом, когда нужно из Form2 обновить, нажимая кнопку "Обновить", вызывать так:

Код: Выделить весь код
Form1->GetValue();
поскольку эта функция является открытым членом, и имеет доступ к данным-членам в Form1.h, то и сможет получится обновление!!!!
(Форму Form1 не хочется делать большой, так как компонентов мало, остальное пространство только место занимает)
А потом, когда жму "Обновить", нужно чтобы предыдущая форма уничтожалась - ((Какой должен быть код для этого?) вроде delete Form2, но как его организовать, то есть проверку того, что Form2 уже есть!) - и создавалась новая или не уничтожалась старая, а только результат обновлялся, у меня создаётся их столько сколько жму кнопку "Обновить"...
Может сюда нужно добавить чего то?

Код: Выделить весь код
if(Form2)   // наверное не так? Потому что так не работает, Подскажите пожалуйста!!!
      delete Form2;
И ещё! Как в Edit'e контролировать количество введённых чисел, наподобии как в MaskEdit'e, чтобы не вводилось больше 5-6 значных цифр!
А если мне нужно в переменную типа unsigned long a; поместить значение из
Код: Выделить весь код
a = Edit1->Text;
вот тут как преобразовать в unsigned long? Вот так в int
Код: Выделить весь код
Edit1->Text.ToInt();
// или 
StrToInt(Edit1->Text);
, в double - ToDouble(); а в unsigned long как?
И как контролировать чтобы при сложении, умножении числа не выходили за диапазон, unsigned long не спасает! Хотелось бы знать, как можно это держать под контролем, не создавая что-то типа char[], а потом использовать atol?

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 17-06-2008 в 20:04. Причина: Оформил тегами свой код...


Отправлено: 03:15, 22-08-2006 | #3


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Возможно идея работать со второй формой как с модальной пособит?

-------
Не могу дать более дельный совет - не хватает системных ресурсов...

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:29, 22-08-2006 | #4


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Вместо Show() использовать ShowModal() ???

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 16:13, 24-08-2006 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] С++ Builder | Обновление Form2

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C++ Builder 6 XCodeR Программирование и базы данных 29 27-04-2013 09:54
C++Builder Guest Программирование и базы данных 3 17-02-2004 22:45
C++ Builder 5 born2die Программирование и базы данных 3 27-08-2003 23:28
C++ Builder Gram Программирование и базы данных 7 11-08-2003 10:22
C++ Builder Gram Программирование и базы данных 3 27-05-2003 20:01




 
Переход