0

ラベルやその他のコンポーネント、画像ボックス、パネルなどを含むフォームがあります。実行中Form.enabled = false;(その上に別のフォームがあるため)、コンポーネントの可視性が true に設定されていても、ラベルが表示されません。何か案は?

何を含めればよいかわからないため、コードは含めませんでした。

助けてくれてありがとう!

編集:ジョエル・イーサトンが言った後、私はこのイベントを使ってみました:

private void label1_VisibleChanged(object sender, EventArgs e)
{
      label1.Visible = true;
}

これは私にStackOverflowException..多分これは親コントロールの可視性を無限にオーバーライドしようとしています..どうすればいいですか?

4

1 に答える 1

1

要素の親オブジェクトを確認します (ツリーをたどります)。通常、これは親が に設定されていることが原因Visible = false;です。特定のコントロールの可視性設定は引き続き として登録されtrueますが、ページが実際にレンダリングされると、可視性が false である親レベルでのコントロールの生成が停止します。

編集:
まず、問題の根本原因を見つける必要があります。これはコードの問題ではなく、期待の問題です。コントロールが表示されることが期待されていますが、それが不可能な条件を作成しました。親コントロールが誤って表示される原因となっている条件を見つけようとすることで、より良いサービスが提供されると思います。ほとんどの場合、親の可視性を強制することに論理的な問題があるか、「可視」コントロールが間違ったルート コンテナーに配置されているという設計上の問題があることがわかります。ただし、親の可視性を総当たりにしたいだけの場合は、再帰的な方法でそれを行うことができます。

private static void SetAllParentVisibility(bool visible, Control ctrl)
{
    ctrl.Visible = visible;
    if (ctrl.Parent != null)
        SetAllParentVisibility(visible, ctrl.Parent);
}

また、上記のメソッドは疑似コードとして扱ってください。私はそれをテストしていませんControl。異なる親タイプに適応できるように、タイプを変更する必要があるかもしれません。

于 2012-12-18T15:16:34.857 に答える