Привязка формы к проекту
От: ILYA_INDIGO Россия http://HIRE7.net
Дата: 21.10.08 22:59
Оценка:
Я хочу сделать так, что бы у меня кнопка, находящаяся на 1-ой форме (Form1) открывала 2-ую форму (Form2). (Имя проекта ILYA 2)
Дело в том, что при указании действия на кнопку
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
{Form2::Show();
}
Выдаёт ошибку
Error 1 error C2352: 'System::Windows::Forms::Control::Show' : illegal call of non-static member function

В файлах ILYA 2.cpp и Form1.h прописал
#include "Form2.h"
Не помогает.
У меня Visual studio 2008 Pro SP1

P.S.В Delphi 7 привязка формы к проекту осуществлялась через меню File/Use Unit...
В VS я похожево не нащёл.


22.10.08 12:03: Перенесено модератором из 'C/C++' — Кодт
illegal call of non-static member function visal studio use unit form form2
Re: Привязка формы к проекту
От: eklmn  
Дата: 22.10.08 03:40
Оценка:
Здравствуйте, ILYA_INDIGO, Вы писали:

ILY>Error C2352: 'System::Windows::Forms::Control::Show' : illegal call of non-static member function


Отгадка кроется в переводе этой строки и в элементарных знаниях С++.
Потрудитесь хоть MSDN открыть и почитать в чем у вас проблема.
Re[2]: Привязка формы к проекту
От: ILYA_INDIGO Россия http://HIRE7.net
Дата: 22.10.08 04:36
Оценка:
E>Отгадка кроется в переводе этой строки и в элементарных знаниях С++.
E>Потрудитесь хоть MSDN открыть и почитать в чем у вас проблема.

Я прекрасно понимаю что я неправильно обращаюсь к элементу нестатической функции, и также я не имею элиментарных представлений по C++, так как я программил до этого на Delphi, там разницы между обращением к главной форме, и обращением к добавленой форме нет никакой. Привязать все добавленные формы к проекту нужно было (как писал ранее) и всё.
А тут я их привязал, я так покрайнемерие думая (писал ранее) И команду Form1::Show(), Она понимает а Form2::Show(), уже всё неправильное...
Я открывал MSDN и вбивал эту ошибку и из множества результатов так и не нащёл пример именно моего случая, так же вбивал эту ошибку в Google...
Пудьте добры подскажите пожалуйста начинающему плюсеру в чём тут у меня ошибка
Re: Привязка формы к проекту
От: igna Россия  
Дата: 22.10.08 05:00
Оценка:
Здравствуйте, ILYA_INDIGO, Вы писали:

ILY>Дело в том, что при указании действия на кнопку

ILY>private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
ILY> {Form2::Show();
ILY> }
ILY>Выдаёт ошибку
ILY>Error 1 error C2352: 'System::Windows::Forms::Control::Show' : illegal call of non-static member function

По-видимому вместо Form2::Show() должно быть что-то вроде form2.Show().
Re[2]: Привязка формы к проекту
От: ILYA_INDIGO Россия http://HIRE7.net
Дата: 22.10.08 05:07
Оценка:
I>По-видимому вместо Form2::Show() должно быть что-то вроде form2.Show().

Я пробывал и Form2.Show() и Form2->Show(), ну тогда проявляется бесмысленная ошибка..
Error 1 error C2143: syntax error : missing ';' before '.' ('->')
Потому как перед . или -> символа ; нету

#pragma endregion
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
{Form2.Show();
}
Re[3]: Привязка формы к проекту
От: igna Россия  
Дата: 22.10.08 05:14
Оценка:
Здравствуйте, ILYA_INDIGO, Вы писали:

ILY>Я пробывал и Form2.Show() и Form2->Show(), ну тогда проявляется бесмысленная ошибка..


Так я же не случайно написал form2 с маленькой буквы. Тебе не имя класса нужно, а имя переменной (типа Form2). Как уж она у тебя называется, form2 или по-другому, посмотри сам.
Re: Привязка формы к проекту
От: Bell Россия  
Дата: 22.10.08 05:20
Оценка:
Здравствуйте, ILYA_INDIGO, Вы писали:

ILY>Я хочу сделать так, что бы у меня кнопка, находящаяся на 1-ой форме (Form1) открывала 2-ую форму (Form2). (Имя проекта ILYA 2)

ILY>Дело в том, что при указании действия на кнопку
ILY>private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
ILY> {Form2::Show();
ILY> }

ILY>Выдаёт ошибку

ILY>Error 1 error C2352: 'System::Windows::Forms::Control::Show' : illegal call of non-static member function

Код в button2_Click должен быть примерно таким:

//Сначала создаем объект Form2;
Form2 frm;//Может быть такой: Form2* frm = new Form2();

//Затем вызываем для созданного объекта нестатическую функцию-член Show
frm.Show();//frm->Show();
...
Любите книгу — источник знаний (с) М.Горький
Re[4]: Привязка формы к проекту
От: ILYA_INDIGO Россия http://HIRE7.net
Дата: 22.10.08 05:31
Оценка: :))
I>Так я же не случайно написал form2 с маленькой буквы. Тебе не имя класса нужно, а имя переменной (типа Form2). Как уж она у тебя называется, form2 или по-другому, посмотри сам.

Действительно при смене регистра F меняются ошибки...
Я даже такого и не опредставлял...
Файл формы я назвал Form2.h
при form2::Show(); выдаёт error C2653: 'form2' : is not a class or namespace name
При form2.Show(); form2->Show();
Error 1 C2065: 'form2' : undeclared identifier Error 2 C2228: left of '.Show'('->Show') must have class/struct/union

В ILYA 2.cpp и в Form1.h я прописал #include "Form2.h"

Кстати на строку form1::Show(); тоже ругается Error 1 error C2653: 'form1' : is not a class or namespace name
Re[2]: Привязка формы к проекту
От: ILYA_INDIGO Россия http://HIRE7.net
Дата: 22.10.08 05:52
Оценка:
B>Код в button2_Click должен быть примерно таким:

B>
B>//Сначала создаем объект Form2;
B>Form2 frm;//Может быть такой: Form2* frm = new Form2();

B>//Затем вызываем для созданного объекта нестатическую функцию-член Show
B>frm.Show();//frm->Show();
B>...
B>


Спасибо получилось при коде Form2 frm; frm.ShowDialog();
Только я доконца не понял... в С++ Нужно постоянно при ссылках на другие формы создавать в команде объекты, а потом только обращаться к этому объекту ?
Re[3]: Привязка формы к проекту
От: placement_new  
Дата: 22.10.08 05:59
Оценка:
Здравствуйте, ILYA_INDIGO, Вы писали:

B>>Код в button2_Click должен быть примерно таким:


B>>
B>>//Сначала создаем объект Form2;
B>>Form2 frm;//Может быть такой: Form2* frm = new Form2();

B>>//Затем вызываем для созданного объекта нестатическую функцию-член Show
B>>frm.Show();//frm->Show();
B>>...
B>>


ILY>Спасибо получилось при коде Form2 frm; frm.ShowDialog();

ILY>Только я доконца не понял... в С++ Нужно постоянно при ссылках на другие формы создавать в команде объекты, а потом только обращаться к этому объекту ?

Нет, нужно иметь один обьект.
Re[3]: Привязка формы к проекту
От: Bell Россия  
Дата: 22.10.08 06:00
Оценка:
Здравствуйте, ILYA_INDIGO, Вы писали:

ILY>Спасибо получилось при коде Form2 frm; frm.ShowDialog();

Ну, я рад

ILY>Только я доконца не понял... в С++ Нужно постоянно при ссылках на другие формы создавать в команде объекты, а потом только обращаться к этому объекту ?

Главное правило — для вызова нестатической функции-члена нужен объект. Как и где его создавать — дело десятое. Можно, как в привенденном примере, по месту, можно сделать его членом главной формы, можно еще как-то — все зависит от ситуации.

ЗЫ
Тебе необходим учебник — заданный вопрос относится к разряду элементарных, и не всегда на форуме найдется человек, которому будет не жалко потратить свое время на разъяснение азбучных истин.
Только без обид
Любите книгу — источник знаний (с) М.Горький
Re[4]: Привязка формы к проекту
От: placement_new  
Дата: 22.10.08 06:01
Оценка:
Здравствуйте, placement_new, Вы писали:

_>Здравствуйте, ILYA_INDIGO, Вы писали:


B>>>Код в button2_Click должен быть примерно таким:


B>>>
B>>>//Сначала создаем объект Form2;
B>>>Form2 frm;//Может быть такой: Form2* frm = new Form2();

B>>>//Затем вызываем для созданного объекта нестатическую функцию-член Show
B>>>frm.Show();//frm->Show();
B>>>...
B>>>


ILY>>Спасибо получилось при коде Form2 frm; frm.ShowDialog();

ILY>>Только я доконца не понял... в С++ Нужно постоянно при ссылках на другие формы создавать в команде объекты, а потом только обращаться к этому объекту ?

_>Нет, нужно иметь один обьект.

Хотя...
Все зависит от задачи
Re[3]: Привязка формы к проекту
От: Аноним  
Дата: 22.10.08 08:25
Оценка:
Здравствуйте, ILYA_INDIGO, Вы писали:

ILY>Только я доконца не понял... в С++ Нужно постоянно при ссылках на другие формы создавать в команде объекты, а потом только обращаться к этому объекту ?


Увы, Илья, Вы пали жертвой черезчур большой "заботы" Delphi. Дело в том, что она автоматом для каждой объявленной в проекте формы
1) объявляет глобальную переменную (посмотрите чуть выше implementation-секции PAS-файла)
2) создает по одному экземпляру каждой формы (загляните в DPR-файл, чтобы убедиться в этом)

При желании, можно (а в боьлших проектах — просто нужно) выключить в настройках такую фичу (называется "Auto create forms & data modules" или как-то так), но глобальные переменные остаются, чистим руками
Re[4]: Привязка формы к проекту
От: MxKazan Португалия  
Дата: 22.10.08 08:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, ILYA_INDIGO, Вы писали:


ILY>>Только я доконца не понял... в С++ Нужно постоянно при ссылках на другие формы создавать в команде объекты, а потом только обращаться к этому объекту ?


А>Увы, Илья, Вы пали жертвой черезчур большой "заботы" Delphi. Дело в том, что она автоматом для каждой объявленной в проекте формы


По-моему, человек пал жертвой собственной невнимательности. Это не упрёк, а просто совет — пользоваться хелпом и разбираться.
Фичу Auto-create forms всегда сразу отрубал, когда переставлял Delphi.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.