C++ Builder XE を使用していますが、TCheckBox の「Showing」プロパティに問題があります。
TForm
(A4_en_Xbox) がある( TGroupBox
AlarmsGroupBox) がある(ChannelConfigForm) がありTCheckBox
ます。
フォーム上の一部のコントロールが表示されないことがあります。
ヘルプ ドキュメントによると、「コンポーネントの Visible プロパティとその親階層内のすべての親が true の場合、表示は true であることが保証されます。コントロールを含む親の 1 つに false の Visible プロパティ値がある場合、表示中の可能性があります。 true または false のいずれかです。表示は読み取り専用プロパティです。"
何が起こっているのかを調べるために、プログラムをデバッグする次の関数を書きました: (注: この関数の debugf は、デバッグ用のものをフォームに書き込む printf と同様に機能する、単に私が書いたデバッグ ステートメントです)
void ShowParentTree(TControl *Control)
{
wchar_t Name[32];
static int level=0;
TWinControl *wc;
level++;
if (level==1)
debugf(L"Parents of control \"%s\" (%s) :",
Control->Name.c_str(),
Control->ClassName().c_str());
// Display what Control has as parents and if they're visible and showing
debugf(L"level %d : %s->Visible = %s",level,
Control->Name.c_str(),
Control->Visible?L"true":L"false");
wc=(TWinControl *)Control;
debugf(L"level %d : %s->Showing = %s",level,
wc->Name.c_str(),
wc->Showing?L"true":L"false");
if (Control->Parent)
ShowParentTree((TControl *)Control->Parent);
level--;
}
ChannelConfigForm を表示すると、次のようになることがあります。
Parents of control "A4_en_Xbox" (TCheckBox) :
level 1 : A4_en_Xbox->Visible = true
level 1 : A4_en_Xbox->Showing = false
level 2 : AlarmsGroupBox->Visible = true
level 2 : AlarmsGroupBox->Showing = true
level 3 : ChannelConfigForm->Visible = true
level 3 : ChannelConfigForm->Showing = true
これは、A4_en_Xbox->Showing プロパティが true である必要があるときに false であることを意味すると理解しています。