我有一个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分钟。
答案 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。