我有以下代码块:
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,并在立即窗口中确认。
谁能告诉我为什么这件事发生了?
答案 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;
}
我已经通过这个小改动重新创建了你的代码,如下所示,它适用于我:
答案 2 :(得分:0)
如果控件设置为可见,则如果其父级不可见,它仍将不可见。因此,如果它在您尚未显示的表单上,则在显示表单之前它们将不会显示。