Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Обращение к форме из своего класса


Автор: caliphornia 28.11.2011, 17:35
Здравствуйте.
Как обратиться к элементу формы из своего собственно класса?
Есть необходимость заполнять компонент richTextBox на форме из класса.
класс по обработке данных: 
public ref class myClass
{
public:
   static void myProc()
{
//обработка
richTextBox1->Lines->Add("что то");//выдает ошибки ?????
}
}

Среде - Visual Studio 2010,
Язык - С++,
Тип проекта - Windows Form Aplication
или может я не правильно обратился к элементу или описал класс?


Автор: borisbn 28.11.2011, 18:43
Цитата(caliphornia @  28.11.2011,  17:35 Найти цитируемый пост)
public ref class myClass

Цитата(caliphornia @  28.11.2011,  17:35 Найти цитируемый пост)
Язык - С++,

 smile 
В смысле это - не Си++, а Си.Net (CLR или как там его... нечто среднее между Си++ и Си#)
Думаю проблема в том, что ф-ция myProc static.
В Си++ (не знаю как в дотНете) к нестатическим членам класса (а судя по всему, richTextBox1 таковым является) нельзя обращаться из static-функций

Автор: caliphornia 28.11.2011, 19:42
тем не менее что вы предложите по решению проблемы?

Автор: vponomarov 12.1.2012, 18:57
Цитата(caliphornia @  28.11.2011,  19:42 Найти цитируемый пост)
тем не менее что вы предложите по решению проблемы? 

передавайте richTextBox, который нужно изменить как аргумент в функцию myProc.

Автор: diadiavova 13.1.2012, 10:22
Цитата(caliphornia @  28.11.2011,  18:35 Найти цитируемый пост)
или может я не правильно обратился к элементу или описал класс?

Не знаю как в проектах с++, но в шарпе к примеру для всех элементов управления, добавленных в дизайнере создаются приватные поля и из другого класса они естественно не видны. Кроме того, свойство Lines ричтекстбокса представляет из себя массив строк, а у массива просто нет метода Add. Добавлять текст в ричтекстбокс можно с помощью метода AppendText. Ну, а вообще обращаться к элементам формы из другого класса непосредственно - плохая идея в принципе, элементы не зря скрывают от произвольного доступа, вместо этого надо создать в форме метод с помощью которого текст будет добавляться в ричтекстбокс, и извне обращаться именно через этот метод.

А вообще целая тема закрепленная есть как раз об этом
http://forum.vingrad.ru/forum/topic-52713.html

Автор: techPro 22.3.2012, 18:57
Я думаю, не стоит обращаться к элементам формы из чужих классов. Это нарушает принципы инкапсуляции. Лучше на форме создать метод, который будет выводить что-то куда-то на форме и к тому же будет проверять данные. По идее контролы формы не должны быть видны за пределами формы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)