2017-07-20 9 views
-1

私のC++アプリケーションでwxWidgetsを使用しています。一度に1つのフレームのインスタンスを作成する方法

ユーザーがセルをダブルクリックすると、別のグリッドで新しいウィンドウが作成される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

あなたがイベントをダブルクリックしwxGridから外部アプリケーションを実行しようとしていますか? – Igor

+0

外部アプリケーションではありません。フィーチャーリストは、グリッド設定があるアプリ内のウィンドウです。グリッド上でダブルクリックが発生すると、新しいウィンドウが作成されます。 –

答えて

1

をクラッシュし、別のセルをクリックした場合は、オプションのカップルがあります

  1. を行ベクトルとするときラインをキープグリッド内をクリックすると、ベクトルから適切な線がクリックされているかどうかをチェックし、クリックされていない場合にのみイベントが移動できるようにします。

  2. クリックが処理された後に行を無効にし、2番目の行を通過させません。

  3. グリッド内のすべての行にチェックボックスを追加し、最初のクリックでチェックボックスをオンにします。後続のものでは、値がチェックされていないかどうかをチェックします。あなたが選ぶ

...

ありがとうございました。


EDIT:

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); 
} 
+0

Imは1つのインスタンスしか作成できませんが、問題が発生した時点で新しいウィンドウが作成され、開いていればすべてがそのように動作します。しかし、一度私はウィンドウを閉じて、私のプログラムがクラッシュするウィンドウを開くためにダブルクリックしようとする。 –

+0

@MaazAzeem、あなたはalgorythmを使用しましたか? closeイベントでそのvframeの行をロック解除する必要があります...おそらく、カスタムイベントをグリッドのあるフレームにいくつかのidとともに送っているのがベストでしょう。 – Igor

+0

個々のグリッド線を無効にする代わりに、新しいフレームを作成するオプションを無効にする代わりに、参照用にコードを更新しました。あなたの助けと忍耐ありがとう –

関連する問題