我正在尝试在某些事件发生时显示和隐藏弹出窗口。弹出窗口正常显示和消失,但所有标签都是空白的。我最初试图在显示表单之前填充标签,但我已经评论了所有这些逻辑。标签全部为空白,但为每个标签正确分配了空间(参见屏幕截图)。
我的弹出控件:
public MyPopUp()
{
InitializeComponent();
}
我的单独课程:
MyPopUp _MyPopUp;
protected override void OnLoad(IServiceProvider myServiceProvider)
{
_MyPopUp = new MyPopUp();
}
protected override void WhenSomethingHappens() {
_MyPopUp.Show();
}
protected override void WhenSomethingElseHappens() {
_MyPopUp.Hide();
}
这是我的designer.cs文件的一部分。我只复制/粘贴了其中一个标签的代码,但表单上的其他5个标签的代码几乎相同。
private System.Windows.Forms.Label label1;
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(58, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(41, 13);
this.label1.TabIndex = 0;
this.label1.Text = "Some Label Text";
//
// MyPopUp
//
this.Controls.Add(this.label1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Name = "MyPopUp";
this.Text = "Some Text";
this.ResumeLayout(false);
this.PerformLayout();
}
答案 0 :(得分:3)
您需要调用Refresh()函数来强制每个子控件使其客户区无效,即重绘。
对于你的情况:
protected override void WhenSomethingHappens() {
_MyPopUp.Show();
_MyPopUp.Refresh();
}
答案 1 :(得分:0)
我做了一个测试,发现有可能使标签文字消失。如果ForeColor
与BackColor
相同,则标签文字会消失。从您的标签添加代码,我看到您没有指定这些颜色。如果未定义WinForms控件,则从父控件(在本例中为Form本身)继承许多属性。这可能意味着Form的ForeColor
和BackColor
是相同的,并且会传播到标签。更改表单或标签的ForeColor
颜色以解决此问题。
答案 2 :(得分:0)
尝试在显示表单之前调用,这样表单将在主线程中创建。
if (this.InvokeRequired)
this.BeginInvoke((Action)(() => //'this.' is the form
{
_MyPopUp.Show();
}));
答案 3 :(得分:0)
这种情况正在发生,因为您无模式地运行表单。
如果您愿意,可以通过运行它来检查您的字体/背景颜色是否良好等。模式化:
System.Windows.Forms.Application.Run(YourFormName);
然后将DoEvent行添加到无模式调用中:
Form2 F2 = new Form2();
F2.Show();
System.Windows.Forms.Application.DoEvents();
那应该这样做!