Page 1 of 1

wxauinotebook изменение страницы

Posted: Sat Aug 22, 2020 8:36 pm
by CatUser13
Здравствуйте,

Подскажите пожалуйста, как можно достать добавленный объект из wxauinotebook, чтобы совершить над ним какие-либо действия?
Например:

Code: Select all

wxAuiNotebook* nb = new wxAuiNotebook(this, ID_AUINotebook);
wxGrid* mygrid = new wxGrid(nb, wxID_ANY);
//настраиваю таблицу 
nb->AddPage(mygrid, wxT("Page");
И вот теперь, как можно обратиться к mygrid через nb, чтобы, например, добавить новую строчку?

Пишу на Ubuntu 19
wxWidgets: 3.0.4

Re: wxauinotebook изменение страницы

Posted: Sun Aug 23, 2020 12:17 am
by ONEEYEMAN
Доброго времени суток,
А где?
Интересует в каком обработчике хотите это сделать?

Спасибо.

Re: wxauinotebook изменение страницы

Posted: Sun Aug 23, 2020 7:19 am
by Kvaz1r
Если планируете использовать грид и дальше, то проще всего сделать его членом класса (как собственно и wxauinotebook).

Но вообще есть функция GetPage/1, которая вернет указатель на страницу, кастанете его к указателю на грид и все должно получится.

Re: wxauinotebook изменение страницы

Posted: Sun Aug 23, 2020 10:11 am
by CatUser13
ONEEYEMAN,

Есть главная функция в которой инициализируется объект nb, чтобы обрабатывать события, там же использую Connect(). По нажатию кнопки в функции создаю объект wxGrid, заполняю его, после чего добавляю его в nb. Чтобы обрабатывать событии кнопок Добавить, Удалить и тд, (изменение таблицы) также использую Connect(). По идеи, я хочу получить доступ к таблице и ее как либо изменить.

Re: wxauinotebook изменение страницы

Posted: Sun Aug 23, 2020 2:57 pm
by CatUser13
Kvaz1r
Можешь пожалуйста показать пример? А то я чет не соображаю как правильно это сделать

Re: wxauinotebook изменение страницы

Posted: Sun Aug 23, 2020 4:37 pm
by ONEEYEMAN
Доброго времени суток,

Code: Select all

class MyWindow
{
public:
    MyWindow();
    wxAuiNotebook *GetNotebook() { return book; }
    wxGrid *GetGrid() { return mygrid; }
private:
    wxAuiNotebook *book;
    wxGrid *mygrid;
};

MyWindow::MyWindow()
{
    book = new wxAuiNotebook(this, ID_AUINotebook);
    mygrid = new wxGrid(nb, wxID_ANY);
//настраиваю таблицу 
    book->AddPage(mygrid, wxT("Page");
}
Спасибо.

Re: wxauinotebook изменение страницы

Posted: Sun Aug 23, 2020 5:45 pm
by Kvaz1r
Пример:

Code: Select all

#include <wx/wx.h>
#include <wx/aui/auibook.h>
#include <wx/grid.h>

class MyFrame : public wxFrame
{
public:
    MyFrame() : wxFrame(NULL, wxID_ANY, "Test", wxDefaultPosition, wxSize(800, 600))
    {
        wxBoxSizer* topSizer;
        topSizer = new wxBoxSizer(wxVERTICAL);

        m_auinotebook = new wxAuiNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_NB_DEFAULT_STYLE);

        topSizer->Add(m_auinotebook, 1, wxEXPAND | wxALL, 5);

        m_grid = new wxGrid(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0);

        m_grid->CreateGrid(0, 1);
        m_grid->SetColLabelValue(0, "Значение");

        m_auinotebook->AddPage(m_grid, "Грид");

        wxBoxSizer* bSizer1 = new wxBoxSizer(wxHORIZONTAL);

        m_Hint = new wxStaticText(this, wxID_ANY, wxT("Введите значение:"), wxDefaultPosition, wxDefaultSize, 0);
        bSizer1->Add(m_Hint, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);

        m_Value = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);
        bSizer1->Add(m_Value, 0, wxALL | wxEXPAND, 5);
        bSizer1->Add(0, 0, 1, wxEXPAND, 5);

        m_Add = new wxButton(this, wxID_ANY, wxT("Добавить"), wxDefaultPosition, wxDefaultSize, 0);
        bSizer1->Add(m_Add, 0, wxALL, 5);

        topSizer->Add(bSizer1, 0, wxEXPAND, 5);

        this->SetSizer(topSizer);
        this->Layout();

        this->Centre(wxBOTH);

        m_Add->Bind(wxEVT_BUTTON, [&](wxCommandEvent&)
            {
                auto value = m_Value->GetValue();
                if (!value.empty())
                {
                    m_grid->AppendRows();
                    m_grid->SetCellValue(m_grid->GetNumberRows() - 1, 0, value);
                    this->Layout();
                }
            });
    }

protected:
    wxAuiNotebook* m_auinotebook;
    wxGrid* m_grid;
    wxStaticText* m_Hint;
    wxTextCtrl* m_Value;
    wxButton* m_Add;
};

class MyApp : public wxApp
{
public:
    bool OnInit()
    {
        (new MyFrame())->Show();
        return true;
    }
}; wxIMPLEMENT_APP(MyApp);
С GetPage я ошибся, не заметил, что это константный метод.