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


Автор: rohzan 19.5.2008, 07:57
Здравствуйте 

Есть 2 формы Form1  и  Form2(From2 пустая и не имеет ни каких функций и компонентов?). На форме Form1 есть кнопка при нажатии которого вызывается Form2 и на нем динамически создается 2 edit и одна кнопка.
Вопрос
Как обработать событию  нажатии динамически созданной кнопки на Form2 если при условии нажатии  должна суммироваться значения edit-ов Form2?


Заранее благодарю,

Автор: ksili 19.5.2008, 09:11
примерно так:
1) создаешь функцию с таким же прототипом как Button1Click() как метод класса Form2. Назовём ее DynButtonClick
2) создаёшь кнопку так:
Код

DynButton = new TButton(Form2);
DynButton->OnClick = DynButtonCliсk;

3) А уже в DynButtonClick выполняешь всё что тебе надо:
Код

Label1->Caption = IntToStr(StrToInt(Edit1->Text) + StrToInt(Edit2->Text) + StrToInt(Edit3->Text));

Автор: petlyura 19.5.2008, 09:12
Когда создаешь динамически кнопку, то пишешь после конструктора.
Button1->OnClick = MyButtonClick;
Помещаешь void __fastcall MyButtonClick(...) в заголовочный файл формы и пишешь обработчик в *.cpp
void __fastcall TForm2::MyButtonClick(...)
{
// суммируешь тут
}

ksili, чуток не успел за тобой smile

Автор: rohzan 19.5.2008, 11:15
 Я сдела как было сказано но не работает 
в чем моя ошибка 
Код

//код в форме 1 
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{

        try
        {
                Form2=new TForm2(this);
                TLabel *label= new TLabel(Form2);
                label->Parent = Form2;
                label->Name = "label"+AnsiString(i);
                label->Top = 5;
                label->Height = 19;
                label->Caption = "COMMENTS";

                TEdit *edit= new TEdit(Form2);
                edit->Parent = Form2;
                edit->Name = "edit"+AnsiString(i);
                edit->Top = 5;
                edit->Left = 60;
                edit->Height = 19;
                edit->Width= 200;
                edit->Text ="";
                label->Left = 50-label->Width;

                TButton *button = new TButton(Form2);
                button->Parent = Form2;
                button->Name = "Button1";
                button->Top=20;
                button->Left=20;
                button->Caption = "ShowMessage";
                button->OnClick = Form2->MyButtonClick();
                Form2->ShowModal();
        }
        __finally
        {
                delete Form2;
        }
}



Форма2 "Unit2.h"
Код

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

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published:    // IDE-managed Components
        void __fastcall MyButtonClick();

private:    // User declarations
public:        // User declarations
        __fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif


"Unit2.cpp"
Код

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

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm2::MyButtonClick()
{
        ShowMessage("AA");
}




Автор: ksili 19.5.2008, 11:21
что/как не работает?

Автор: rohzan 19.5.2008, 11:37
Выдает ошибку 
E2109 Not an allowed type
в строке 

 button->OnClick = Form2->MyButtonClick();

Автор: orthrus 19.5.2008, 12:09
скобки убери:
Код

button->OnClick = Form2->MyButtonClick;

А в силу каких причин кнопку и эдиты нельзя создать в конструкторе Form2?

Автор: rohzan 19.5.2008, 12:25
спасибо 
заработало 
 

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