作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为学校的一个类(class)制作一个数独游戏,您可能已经猜到我正在使用带有 C++ 的 wxWidgets。
我的问题是,当我想在方 block 中创建一个具有不同值的新板时,我不知道如何刷新程序。
我使用 createBoard 函数创建板:
//Storing a random-generated sudokuboard into "board".
setBoard(board);
// sizers for the layout of bricks and buttons
wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); // overall layout
// 9 rows and 9 columns with fixed height and width
wxGridSizer *gs = new wxGridSizer(9, 9, 1, 1);
wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL); // button commands
// Define font and font size for the text in the squares
// Define valid input values for the text in the squares
csCharCtrl::Initialize(wxT("123456789"), sz);
// Create the squares
for (int i = 0; i < 81; i++) {
m_square[i] = CreateSquare(this, i+1, i/9, i%9);
// install an event handler for Set Focus event for the square
gs->Add(m_square[i], 0, wxEXPAND);
}
Bind(wxEVT_CHILD_FOCUS, &BoardPanel::OnChildFocus, this);
// buttons commands
// Check command
wxButton *btnnew = new wxButton(this, ID_New, wxT("New board"));
btnnew->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &BoardPanel::OnNew, this);
hbox2->Add(btnnew, 2, wxEXPAND);
vbox->Add(gs, 1, wxALIGN_CENTER | wxALL, 20);
vbox->Add(hbox2, 0, wxALIGN_CENTER | wxALL, 20);
SetSizer(vbox);
setBoard 在多维 vector 中生成一个新的数独游戏。
我有一个按钮正在监听我的点击,我希望它通过再次调用 setBoard 并在点击时刷新面板来创建一个新面板。
我该怎么做?
我的按钮代码很简单:
void BoardPanel::OnClick(wxCommandEvent& WXUNUSED(event)){
//CODE onClick
}
这是程序的图片:
最佳答案
我想 m_square[i]
是 wxTextCtrl*
或类似的东西。在 OnClick
事件处理程序中,在 setBoard()
之后,我会做类似的事情
for (int i = 0; i < 81; i++)
{
m_square[i]->SetValue(/*square value text*/);
}
这应该可以做到,因为您的方 block 不会改变大小或任何东西。
如果您的控件在更改内容后确实更改了大小,您也必须这样做
vbox->FitInside(this); //since you probably don't want to resize the main window
Layout();
鉴于您的事件处理程序似乎是您的主面板类的成员。
关于c++ - 如何在wxWidgets中刷新,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27661076/
我是一名优秀的程序员,十分优秀!