событие содержит значение мусора при связывании с кнопкой в ​​другом кадре - PullRequest
0 голосов
/ 08 апреля 2011

У меня есть проблема в программировании на С ++ ...... надеюсь, вы ее решите. я занимаюсь программированием на wxwidget с c ++. в основном проблема заключается в том, что после создания объекта, когда я вызываю метод, который связывается с кнопкой, значение не может войти в этот метод. оно содержит мусорное значение.

У меня есть три файла:

1> main.h, main.cpp

2> frame.h, frame.cpp

3> widget.h, widget.cpp

мы формируем фрейм (окно) в классе фреймов и выполняем его в главном файле .... т.е. файл фреймов содержит код, связанный с фреймом, а основной класс содержит только код, с помощью которого выполняется класс фреймов. Я должен добавить некоторые элементы (например, текстовое поле, статический текст, кнопку и календарь) на фрейм. Мы можем сделать это двумя способами: 1) написать код элементов в классе фрейма 2) написать код в другом файле и использовать в классе фрейма ..... 1-й пробег нормально, я должен сделать 2-й путь. Итак, я исправил код всех элементов в файле wxwidget.cpp, содержащем класс calendar_control. Все элементы работают нормально, но связывание события с кнопкой не работает, когда мы связываем кнопку в классе фрейма, кнопка работает, но значение, содержащееся в методе события, имеет значение мусора ....... я посылаю код файла фрейма и файл виджета ....

//frame.cpp
#include "frame.h"
#include "widget.h"

frame :: frame()
 :wxFrame(NULL,wxID_ANY,wxT(""), wxPoint(-1, -1), wxSize(400,400))
{

    d_parent_panel = new wxPanel(this,-1);

cal = new calendar_control(d_parent_panel,25,25)
;
/*****if i connect here it work but have garbage value in there event method , if  we not use  here only last object i.e cal2 work not cal**/   

//Connect(this->cal->d_id_date_on_calendar_popup_button,wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(calendar_control::d_on_date_calendar_popup_button_evt));

    cal2 = new calendar_control(d_parent_panel,25,90);
    //Connect(this->cal2->d_id_date_on_calendar_popup_button,wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(calendar_control::d_on_date_calendar_popup_button_evt));

};

//widget.cpp
#include "widget.h"

calendar_control :: calendar_control(wxPanel *parent_panel,int x,int y)

{
    date_on_calendar_display_box   = new wxTextCtrl(parent_panel,wxID_ANY,wxT(""),wxPoint(x,y+5),wxSize(120,25),wxTE_READONLY);
    date_on_calendar_name_text     =  new wxStaticText(parent_panel,wxID_ANY,CALENDAR_FORMAT_TEXT ,wxPoint(x,y+40),wxDefaultSize);


    date_on_calendar_popup_button   = new wxBitmapButton(parent_panel,d_id_date_on_calendar_popup_button=wxNewId(),calendar_pop_up_bitmap,wxPoint(x+135,y),wxDefaultSize,wxNO_BORDER);
    //Connect(d_id_date_on_calendar_popup_button,wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(calendar_control:: d_on_date_calendar_popup_button_evt));


mystring =wxString::Format(wxT("%i"),d_id_date_on_calendar_popup_button);
    wxPuts(mystring);       

}

/*
 * *********************************************
 * Event handling
 * **********************************************
 */
void calendar_control::d_on_date_calendar_popup_button_evt(wxCommandEvent& event)
{
    wxPuts(mystring);
//contain id of button , but using here it contain garbage value
    but not in constructor
}
...