我在我的c ++应用程序中使用wxWidgets。
我有一个wxGrid设置,用户可以在其中双击一个单元格,这将创建一个带有另一个网格的新窗口。
我在使用网格关闭并重新打开新窗口时出现问题。
void FeatureList::mouseDClick(wxGridEvent& event)
{
int n_row, n_col;
n_row = event.GetRow();
n_col = 0;
m_sCellValue = grid->GetCellValue(n_row, n_col);
if ( frame == NULL ) // If frame is closed
{
CreateCrackBoxFrame(m_sCellValue);
}
else{
frame->Raise(); // otherwise bring it to the front.
}
}
void FeatureList::CreateCrackBoxFrame(wxString m_sCellValue)
{
frame = new CrackBoxFrame(m_pvFeatures, m_sCellValue, m_bDisplayInMetric);
frame->Show(true);
}
CrackBoxFrame::CrackBoxFrame(vector<Feature> *pvFeatures, wxString CellValue,
bool bDisplayInMetric)
: wxFrame(NULL, wxID_ANY, wxT("CrackBoxes"),wxDefaultPosition, wxSize(725,
400))
{
}
如果我关闭新窗口,然后点击另一个单元格我的程序崩溃
答案 0 :(得分:1)
为此你有几个选择:
保持线条的向量,当点击网格中的线条时,检查是否从向量中单击了相应的线条,并且只有在未单击时才允许该事件发生。
处理完点击后禁用该行,不要让第二行通过。
在网格中的每一行添加复选框,并在第一次单击时进行检查。在随后的 - 检查是否未检查该值。
你选择......
谢谢。
编辑:
void FeatureList::CreateCrackBoxFrame(wxString m_sCellValue)
{
frame = new CrackBoxFrame(m_pvFeatures, m_sCellValue, m_bDisplayInMetric);
frame->Show(true);
frame->Bind( wxEVT_CLOSE, &FeatureList::OnCrackBoxClose, this );
}