Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Связь между формами


Автор: zhenium 18.5.2007, 19:57
Добрый всем вечер!

Вот такой вопрос.
В проекте имеется несколько форм. В классе одной из них объявлен объект моего класса.
Как сделать так, чтобы этим объектом можно было пользоваться в других формах?
Прописывал заголовочник нужной формы в другой, всё равно ничего не получается...

Подскажите, кто знает...
Заранее благодарен!

Автор: NightXXX 18.5.2007, 20:06
Самое простое решение, сделай открытым свой класс для внешнего мира!
Если я не ошибаюсь то при связке форм, наследование классов форм идет автоматически, следовательно можно пользоваться услугами другого класса!

Автор: Anikmar 18.5.2007, 20:12
Покажите код, так сложно что-то сказать.
Может вы закрыли свой объект, может вызываете неправильно

Автор: zhenium 18.5.2007, 20:14
Это-то можно, но мне по заданию требуется, чтобы объект был закрытым...

Автор: Anikmar 18.5.2007, 20:18
Тогда делайте открытые методы доступа к этому объекту. Какие проблемы?

Можно как-нибудь так (извращение, конечно, на мой взгляд, но условие соблюдено):
Код

class MyClass
{
private
  MyClass1 MyObject;
public: 
  MyClass1* GetMyObject(void){return &MyObject}

Автор: zhenium 18.5.2007, 20:20
Заголовочник с нужным классом.

Код

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "sport.hpp"
#include "master.hpp"
#include "exept.hpp"
#include <Grids.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
#include <DBCtrls.hpp>
#include <list>
#include <algorithm>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Enter_1;
    TButton *Enter_2;
    TMainMenu *MainMenu1;
    TMenuItem *File1;
    TMenuItem *Exit1;
    TMenuItem *Help2;
    TMenuItem *SearchforHelpOn2;
    TMenuItem *About1;
    TPanel *Panel1;
    TStringGrid *StringGrid2;
    TStringGrid *StringGrid1;
    TMenuItem *Save;
    TMenuItem *First;
    TMenuItem *Second;
    TButton *Button1;
    TButton *Button2;
    TBevel *Bevel1;
    TButton *Button3;
    TButton *Button4;
    TLabel *Label1;
    TLabel *Label2;
    TButton *Button5;
    TButton *Button6;
    TEdit *Edit1;
    TMenuItem *N1;
    TMenuItem *N2;
    void __fastcall Enter_1Click(TObject *Sender);
    void __fastcall Enter_2Click(TObject *Sender);
        void __fastcall Exit1Click(TObject *Sender);
    void __fastcall SearchforHelpOn2Click(TObject *Sender);
    void __fastcall About1Click(TObject *Sender);
    void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y);
    void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
    void __fastcall FormMouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
    void __fastcall FormDblClick(TObject *Sender);
    void __fastcall FirstClick(TObject *Sender);
    void __fastcall SecondClick(TObject *Sender);
    void __fastcall Button1Click(TObject *Sender);
    void __fastcall Button3Click(TObject *Sender);
    void __fastcall Button4Click(TObject *Sender);
    void __fastcall Button2Click(TObject *Sender);
    void __fastcall Button5Click(TObject *Sender);
    void __fastcall Button6Click(TObject *Sender);
    void __fastcall N1Click(TObject *Sender);
    void __fastcall N2Click(TObject *Sender);

private:    // User declarations
public:        // User declarations

    master_t
        ob_1,
        ob_2;


    exept_t
        ob;

    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
int
    StartX,
    StartY;
bool
    get = false,
    get_1 = false;
int
    metka = 0,
    ctr = 0,
    ctr_2 = 0,
    ctr_3 = 20,
    ctr_4 = 0;
float
    ctr_1;
std :: list <master_t> obj_1;
std :: list <master_t> obj_2;
std :: list <master_t> :: iterator p_1 = obj_1.begin();
std :: list <master_t> :: iterator p_2 = obj_2.begin();

//---------------------------------------------------------------------------
#endif


Файл, в котором его нужно использовать.

Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit5.h"
#include "sport.hpp"
#include "master.hpp"
#include "exept.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm5 *Form5;

//---------------------------------------------------------------------------
__fastcall TForm5::TForm5(TComponent* Owner)
    : TForm(Owner)
{
    Label1->Caption = "Àäðåñ ñîõðàíåíèÿ";
    Label2->Caption = " Èìÿ ôàéëà";
}
//---------------------------------------------------------------------------

void __fastcall TForm5::BitBtn2Click(TObject *Sender)
{
    Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm5::BitBtn1Click(TObject *Sender)
{
//    ob_1.set_data( obj_1, date, time_val );
}
//---------------------------------------------------------------------------

Автор: Anikmar 18.5.2007, 20:22
Вы забыли добавить Form1:
Form1->ob_1.set_data( obj_1, date, time_val );

Автор: zhenium 18.5.2007, 20:33
Спасибо всем огромное!!!
Получилось!

Жаль не могу Вам поставить плюсы!

Автор: Klin 18.5.2007, 20:36
Цитата(zhenium @  18.5.2007,  21:33 Найти цитируемый пост)
Жаль не могу Вам поставить плюсы!

Зато я могу smile

Автор: zhenium 18.5.2007, 20:39
Тогда награди от моего имениsmile
Спасибо.

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