Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当Control.Visible=true变成false时?_C#_Winforms - Fatal编程技术网

C# 当Control.Visible=true变成false时?

C# 当Control.Visible=true变成false时?,c#,winforms,C#,Winforms,我有一个C#WinForms项目,它的功能非常类似于向导。单个步骤位于一个名为StepPanel的类上,该类继承自表单中的Panel控件,这些面板以数组的形式组织 我遇到的是,当调用UpdateUI()并遍历数组时,调整当前步骤的向导步骤标题文本,它确保隐藏所有非活动步骤,并确保活动步骤在正确位置可见,大小正确 代码如下: private void UpdateUI() { // If the StepIndex equals the array length,

我有一个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);
    }
private void UpdateUI()
{
//如果StepIndex等于数组长度,这就是我们的提示
//退出。
if(StepIndex==Steps.Length)
{
Application.Exit();
返回;
}
对于(var xx=0;xx
当一切都说了又做了,步骤[StepIndex].Visible==false


我仍然对这种行为感到困惑,因为我不到30分钟前还在工作。

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

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

要解决此问题,您需要首先将父控件/contianer控件设置为
Visible=true
,然后将子控件设置为if(xx==StepIndex)


除非我遗漏了什么,否则它只会是真的并且循环结束。

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

SetNavigationButtonState(true);
是否执行步骤[StepIndex]。可见==true?如果是这样,那么请确保
StepIndex
实际上是您期望的索引(不是关闭1,也不是反映“上一个”步骤)。如果您确认正确的步骤设置为true,那么您必须在其他地方更新它

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


HTH.

您在过去30分钟内有没有更改过任何内容?是的,目前正在积极开发中。方法
SetNavigationButtonState
的作用是什么?表单底部有三个按钮:后退/重新启动、下一步/完成和取消。此方法整合了维护其状态的逻辑(即启用/禁用、当前按钮文本)根据您所处的步骤。可能无论您最近做了什么更改,都会破坏这一点,因为我们不知道StepIndex设置在何处,您无法做出这样的假设。StepIndex跟踪用户所处的步骤,这与数组中的StepPanel相关联。@Sani Huttune您是对的,我误读了顶部的代码。StepPanel似乎成为另一个隐藏的踏板的孩子。很好你解决了它。我最后一句话其实不是真的。可以在父控件之前将“子控件可见”属性设置为true。该属性将保持为false,但当您将父属性设置为true时。Net将“神奇地”记住子控件的状态并相应地进行设置。我认为这一切都是因为我试图将一个步骤面板排列在另一个步骤面板上,而设计师试图提供帮助。我添加了代码,如果StepPanel的父级不是表单,则删除它,然后将其添加到表单的控件集合中。