什么时候Control.Visible = true结果是假的?

时间:2011-05-19 16:05:42

标签: c# winforms

我有一个C#WinForms项目,它的功能非常像向导。各个步骤位于一个名为StepPanel的类中,该类继承自Panel控件,在表单中,这些面板以数组形式组织。

我遇到的是当调用UpdateUI()并遍历数组时,调整当前步骤的向导步骤标题文本,它确保隐藏所有非活动步骤,并确保活动步骤在右侧可见,尺寸合适。

以下是代码:

    private void UpdateUI()
    {
        // If the StepIndex equals the array length, that's our cue 
        // to exit.
        if (StepIndex == Steps.Length)
        {
            Application.Exit();
            return;
        }

        for (var xx = 0; xx < Steps.Length; xx++)
        {
            if (xx == StepIndex)
            {
                if (!String.IsNullOrEmpty(Steps[xx].Title))
                {
                    LabelStepTitle.ForeColor = SystemColors.ControlText;
                    LabelStepTitle.Text = Steps[xx].Title;
                }
                else
                {
                    LabelStepTitle.ForeColor = Color.Red;
                    LabelStepTitle.Text =
                        Resources.UiWarning_StepTitleNotSet;
                }
            }
            else
            {
                Steps[xx].Visible = false;
            }
        }

        Steps[StepIndex].Top = 50;
        Steps[StepIndex].Left = 168;
        Steps[StepIndex].Width = 414;
        Steps[StepIndex].Height = 281;
        Steps[StepIndex].Visible = true;

        SetNavigationButtonState(true);
    }

当所有内容完成后,Step [StepIndex] .Visible == false。

我仍然对这种行为感到困惑,因为我的工作时间不到30分钟。

3 个答案:

答案 0 :(得分:17)

如果将父/容器控件设置为Visible = false,则将任何子控件设置为Visible = true将不会产生任何影响。子控件的Visible属性仍为false

我不知道在这种情况下是否会发生这种情况,因为我不知道控件的结构,但似乎是一种可能的情况。

要解决此问题,您需要先将父/ contianer控件设置为Visible = true,然后将子控件设置为。

答案 1 :(得分:0)

if (xx == StepIndex)

除非我遗漏了某些内容,否则只会是真的并且循环结束。

答案 2 :(得分:0)

有几种可能性。在行上附加调试器时:

SetNavigationButtonState(true);

Steps[StepIndex].Visible == true吗?如果是这样,那么请确保StepIndex实际上是您期望的索引(不是关闭1,而不是反映“上一步”)。如果验证正确的步骤设置为true,则必须在其他位置更新它。

如果Steps[StepIndex].Visible == false在您将其设置为true后立即执行,则Visible属性上的getter将根据某些计算返回,或触发将其更改为false的事件。

HTH。