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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2014, 15:27   #1
BoozZzilla
Форумчанин
 
Аватар для BoozZzilla
 
Регистрация: 26.01.2009
Сообщений: 125
Вопрос С++ Работа с элементами другой формы

Извините если слишком много буков.
Проблема следующая: есть динамически создаваемые объекты. Их много и создаю я их в цикле-матрёшке. После к ним надо как то обращаться чтобы поменять их свойства. Когда конкретный кусок кода вызывается с того же .cpp где создается форма то все отрабатывает нормально. Я решил в главном модуле оставить логику а математику вынести в виде функций в другой модуль. Так вот когда тот же код отрабатывается из второго модуля вываливается access violation.
Я примерно понимаю что это обращение в никуда, ну или по крайней мере не туда. Но не понимаю почему.
Был ничтожный опыт программирования на Delphi. Там подобные вещи понял как реализовать - подключал другой модуль в Uses и далее обращался свободно (что то типа TForm1.Panel1.Edit1.text...). Подскажите что не так здесь?

Unit1.h
Код:
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
	TPanel *Panel2;
	TButton *Button1;
	TPanel *Panel1;
	TButton *Button2;
	void __fastcall Button1Click(TObject *Sender);
	void __fastcall Button2Click(TObject *Sender);
private:	// User declarations
public:		// User declarations
	__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


и собсна код который выполняется из Unit1.cpp и вылетает из Unit2.cpp
Код:
int a,b,c,d;
for (a = 0; a <= 2; a++) {
	for (b = 0; b <= 2; b++) {
		for (c = 0; c <= 2; c++) {
			for (d = 0; d <= 2; d++) {
				CreateTEdit(AnsiString("Edit"),(c*3+d)*10+(a*3+b),Form1->Panel1);
				TEdit *Comp=(TEdit *)Form1->Panel1->FindComponent("Edit"+IntToStr((c*3+d)*10+(a*3+b)));
				Comp->Parent=Form1->Panel1;
				Comp->Top=15+(a*3+b)*35+a*10;
				Comp->Left=15+(c*3+d)*35+c*10;
				Comp->Height=30;
				Comp->Width=30;
				Comp->NumbersOnly=true;
				Comp->ReadOnly=true;
				Comp->Alignment=taCenter;
				Comp->Font->Height=-18;
				Comp->Text=IntToStr((c*3+d)*10+(a*3+b));
				Comp->Color=clMoneyGreen ;
			}
		}
	}
}
Строчка на которой программа вываливается подчеркнута и жирная.

в Unit1.cpp заинклюдил Unit2.cpp
в Unit2.cpp заинклюдил Unit1.h иначе ругалось
Про заголовки почитал но недопонял, буду перечитывать но был бы благодарен если бы мне разжевали если я что то сделал неправильно с этими включениями. Просто пытался как в Delphi в первом сослаться на второй а во втором на первый, он ругается что слишком глубокое вложение, в рекурсию видимо бесконечную сваливается. Не понимаю как корректно надо ссылаться на другие модули здесь.
BoozZzilla вне форума Ответить с цитированием
Старый 11.10.2014, 15:43   #2
BoozZzilla
Форумчанин
 
Аватар для BoozZzilla
 
Регистрация: 26.01.2009
Сообщений: 125
По умолчанию

Апдейт такой:

по прочтению пары топиков подумал - возможно моя Panel1 и все что на ней должны быть объявлены в Public чтобы к ним можно было обращаться?
Если догадка правильная, что тогда означает Published?
BoozZzilla вне форума Ответить с цитированием
Старый 11.10.2014, 16:09   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Глупый вопрос: А почему не использовать Грид вместо кучи эдитов?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.10.2014, 16:11   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Published - это раздел класса, где содержатся свойства и события, доступные из object inspector в дизайн-режиме.

Теперь по коду: поставь брейкпойнт на свою подчёркнутую строку и посмотри, какая из переменных = NULL для начала.

И глобальный вопрос: нафига тебе такой огород из вложенных циклов? Выглядит просто чудовищно!!! Скажи, что ты пытаешься сделать, мы подскажем, как это сделать проще (если возможно).
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 12.10.2014, 12:28   #5
BoozZzilla
Форумчанин
 
Аватар для BoozZzilla
 
Регистрация: 26.01.2009
Сообщений: 125
По умолчанию

Я хочу программу для решения судоку сделать, и в этих эдитах у меня будут цифры. Хочу отдельно на каждый эдит отрабатывать клик мыши, если будет грид то (если я правильно понимаю) не будет привязки к элементу при клике на нём. Потом сложу значения из эдитов в матрицу и буду решать.
А четыре цикла просто чтобы сделать промежутки между блоками 3х3. Это сейчас все вешаю на кнопку и пытаюсь отработать, потом просто один раз запущу это при открытии программы, это не будет постоянно отрабатываться.

Последний раз редактировалось BoozZzilla; 12.10.2014 в 12:35.
BoozZzilla вне форума Ответить с цитированием
Старый 12.10.2014, 12:39   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
если я правильно понимаю
Ниразу не правильно. В событии отработки нажатия мышки свойства Row и Col будут определять кликнутую ячейку.
Если это не нравится всегда можно использовать событие OnMouseUp. Там есть координаты, по которым можно определить над какой ячейкой был клик.
А мульон эдитов - нонконформисский нонсенс.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.10.2014, 12:51   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от BoozZzilla Посмотреть сообщение
Я хочу программу для решения судоку сделать, и в этих эдитах у меня будут цифры. Хочу отдельно на каждый эдит отрабатывать клик мыши, если будет грид то (если я правильно понимаю) не будет привязки к элементу при клике на нём. Потом сложу значения из эдитов в матрицу и буду решать.
А четыре цикла просто чтобы сделать промежутки между блоками 3х3. Это сейчас все вешаю на кнопку и пытаюсь отработать, потом просто один раз запущу это при открытии программы, это не будет постоянно отрабатываться.
Даже боюсь представить, как визуально будет выглядеть этот дикий кошмар. Прицепляю тебе пример - свою старую прогу по сабжу, посмотри.
Изображения
Тип файла: jpg _screen.jpg (50.2 Кб, 27 просмотров)
Вложения
Тип файла: rar Sudoku.rar (288.0 Кб, 10 просмотров)
Тип файла: rar Files.rar (277.4 Кб, 10 просмотров)
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 12.10.2014, 12:59   #8
BoozZzilla
Форумчанин
 
Аватар для BoozZzilla
 
Регистрация: 26.01.2009
Сообщений: 125
По умолчанию O.K.

Хорошо, спасибо, честное слово сделаю через грид, т.к. будет проще
Кажется странным что то считать по координатам если есть возможность сразу взять номера строки и столбца ячейки.

Однако, я упёртый, и если столкнулся надо проблему решить. Просто чтобы понять что я неправильно сделал, кроме самого метода. В понедельник попробую по совету Миная отследить на что ругается(проект на рабочем компе).

Спасибо что тратите время, я не прощаюсь
BoozZzilla вне форума Ответить с цитированием
Старый 12.10.2014, 13:01   #9
BoozZzilla
Форумчанин
 
Аватар для BoozZzilla
 
Регистрация: 26.01.2009
Сообщений: 125
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Даже боюсь представить, как визуально будет выглядеть этот дикий кошмар. Прицепляю тебе пример - свою старую прогу по сабжу, посмотри.
Вот нетерпимость никогда не была добродетелью. Я конечно должен терпеть, т.к. нахожусь в зависимом положении, однако не увидев результата мне кажется рано судить о нём...

За проект спасибо, но я боюсь заглядывать - если я не найду свои грабли, как я научусь что то выдумать и найти ошибку в выдуманном?
Апдейт: скачал и открыл, и как мне в общем то мог помочь этот файл? Сделать такой-же дизайн? ))

Последний раз редактировалось BoozZzilla; 12.10.2014 в 13:06.
BoozZzilla вне форума Ответить с цитированием
Старый 12.10.2014, 13:05   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Однако, я упёртый, и если столкнулся надо проблему решить. Просто чтобы понять что я неправильно сделал, кроме самого метода. В понедельник попробую по совету Миная отследить на что ругается(проект на рабочем компе)
Забираю свой совет назад! Даю новый: удали всё и начни с нуля.
Цитата:
Вот нетерпимость никогда не была добродетелью.
оффтопик
Цитата:
Я конечно должен терпеть
не должен.
Цитата:
однако не увидев результата мне кажется рано судить о нём...
тебе кажется.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C#] Управление элементами другой формы JonMagon Помощь студентам 13 07.11.2012 12:24
Проблема с элементами формы и jquery coolartemka JavaScript, Ajax 1 02.06.2011 00:23
Создание формы-списка с элементами из БД maryan.vetrov PHP 10 24.12.2010 04:49
Из DBGrid одной формы отразить в ListBox на другой формы VenZell БД в Delphi 2 28.05.2010 07:27
Работа с компонентами и их вызов из другой формы Патрон Общие вопросы Delphi 3 09.12.2008 04:20