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

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
CatUser13
In need of some credit
In need of some credit
Posts: 7
Joined: Mon Aug 03, 2020 6:19 pm

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

Post by CatUser13 » Sat Aug 22, 2020 8:36 pm

Здравствуйте,

Подскажите пожалуйста, как можно достать добавленный объект из 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

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 4543
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

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

Post by ONEEYEMAN » Sun Aug 23, 2020 12:17 am

Доброго времени суток,
А где?
Интересует в каком обработчике хотите это сделать?

Спасибо.

Kvaz1r
Super wx Problem Solver
Super wx Problem Solver
Posts: 251
Joined: Tue Jun 07, 2016 1:07 pm

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

Post by Kvaz1r » Sun Aug 23, 2020 7:19 am

Если планируете использовать грид и дальше, то проще всего сделать его членом класса (как собственно и wxauinotebook).

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

CatUser13
In need of some credit
In need of some credit
Posts: 7
Joined: Mon Aug 03, 2020 6:19 pm

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

Post by CatUser13 » Sun Aug 23, 2020 10:11 am

ONEEYEMAN,

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

CatUser13
In need of some credit
In need of some credit
Posts: 7
Joined: Mon Aug 03, 2020 6:19 pm

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

Post by CatUser13 » Sun Aug 23, 2020 2:57 pm

Kvaz1r
Можешь пожалуйста показать пример? А то я чет не соображаю как правильно это сделать

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 4543
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

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

Post by ONEEYEMAN » Sun Aug 23, 2020 4:37 pm

Доброго времени суток,

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");
}
Спасибо.

Kvaz1r
Super wx Problem Solver
Super wx Problem Solver
Posts: 251
Joined: Tue Jun 07, 2016 1:07 pm

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

Post by Kvaz1r » Sun Aug 23, 2020 5:45 pm

Пример:

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 я ошибся, не заметил, что это константный метод.

Post Reply