これを検索して見つけるのは非常に難しいと思いましたが、非常に簡単に言えば、パネルからコントロールを削除するにはどうすればよいですか? wxStaticText と wxTextCtrl があり、既存のアイテムを削除して新しいアイテムに置き換えたいですか? 呼び出すことができるある種のコマンドはありますか、それとも自分で何かを作成する必要がありますか? 乾杯
2 に答える
編集:ravenspointが指摘したように、コントロールを削除するだけでは十分ではありません。一部のコントロールは、で追加のクリーンアップを実行しDestroy()
ます。
あなたは単にDestroy()
コントロールすることができます。wxWidgetsはそれを親ウィンドウから自動的に削除し、そのメモリを解放します。
wxWindow* ctrl = new wxStaticText(this);
ctrl->Destroy();
ctrl = new wxTextCtrl(this);
コントロールへのポインタがない場合はFindWindowById
、FindWindowByLabel
またはFindWindowByName
を使用して取得できます。
if(wxWindow* ctrl = wxWindow::FindWindowById(ID_MYCTRL,this))
ctrl->Destroy();
コントロールがサイザーに追加された場合は、有効な間に交換する必要があります。
newCtrl = new wxWindow(...);
sizer->Replace(oldCtrl,newCtrl); // both oldCtrl and newCtrl must be valid
oldCtrl->Destroy();
Layout(); // update sizer
または、最初からwxTextCtrlを作成して、読み取り専用にすることもできます。ただし、wxStaticTextのように表示するには、追加のスタイル変更が必要になります(たとえば、背景色、境界線など)。
最も簡単な方法は、ウィジェットを非表示にすることです。 http://docs.wxwidgets.org/trunk/classwx_window.html#a7ed103df04014cb3c59c6a3fb4d95328
ただし、ウィジェットを完全に削除する場合は、Destroy http://docs.wxwidgets.org/trunk/classwx_window.html#a6bf0c5be864544d9ce0560087667b7fcを呼び出します。