作业陈述不起作用

时间:2012-10-04 13:21:19

标签: c# winforms

我有以下代码块:

        Label[] TagLabels = { labelCITag, labelCATag, labelCAuthTag, labelCLTag, labelCCTag, labelOther1Tag, labelOther2Tag, labelOther3Tag, labelOther4Tag };
        TextBox[] TagTextBoxes = { textBoxCITag, textBoxCATag, textBoxCAuthTag, textBoxCLTag, textBoxCCTag, textBoxOther1Tag, textBoxOther2Tag, textBoxOther3Tag, textBoxOther4Tag };
        for (int i = 0; i < TagTextBoxes.Length; i++)
        {
            if (TagTextBoxes[i].Text == "")
                TagLabels[i].Visible = false;
            else
                TagLabels[i].Visible = true;
        }

代码遍历TextBoxes,并根据TextBoxes是否为空来使标签可见/不可见。

在调试窗口中,我可以看到代码执行else条件,但是当我将鼠标移到属性上时,它仍显示为false,并在立即窗口中确认。

谁能告诉我为什么这件事发生了?

enter image description here

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:4)

如果你使用Reflector查看Control.Visible的实现,它的getter会这样做:

internal virtual bool GetVisibleCore()
{
    if (!this.GetState(0x2))
    {
        return false;
    }
    return ((this.ParentInternal == null) || this.ParentInternal.GetVisibleCore());
}

然而,它的制定者要复杂得多;吸气剂和固定剂不对称。

.Visible属性可能不会简单地返回您设置它的最后一个值,而是返回控件的当前状态。由于您在调试时更改了其属性,因此尚未允许控件更新,因此它们当前不可见。

如果您允许代码运行以便更新窗口,则状态应该变为Visible。

您也可以通过在更改Visible属性后立即放置Application.DoEvents()来测试这一点(但不要将Application.DoEvents()用于测试以外的任何其他内容 - 这是可怕的。)

答案 1 :(得分:0)

试试这个:

Label[] TagLabels = { labelCITag, labelCATag, labelCAuthTag, labelCLTag, labelCCTag, labelOther1Tag, labelOther2Tag, labelOther3Tag, labelOther4Tag };
TextBox[] TagTextBoxes = { textBoxCITag, textBoxCATag, textBoxCAuthTag, textBoxCLTag, textBoxCCTag, textBoxOther1Tag, textBoxOther2Tag, textBoxOther3Tag, textBoxOther4Tag };
for (int i = 0; i < TagTextBoxes.Length; i++)
{
    if (string.IsNullOrEmpty(TagTextBoxes[i].Text))
        TagLabels[i].Visible = false;
    else
        TagLabels[i].Visible = true;
}

我已经通过这个小改动重新创建了你的代码,如下所示,它适用于我:

SS

答案 2 :(得分:0)

如果控件设置为可见,则如果其父级不可见,它仍将不可见。因此,如果它在您尚未显示的表单上,则在显示表单之前它们将不会显示。