从mainForm调用其他窗体-其他窗体的组件不可见
本文关键字:其他 窗体 组件 mainForm 调用 | 更新日期: 2023-09-27 18:00:15
在我的mainForm中,我在其Form_Load中检查已安装的组件。如果没有安装,我会调用另一个窗体(WaitingDialog)来显示安装状态。我将waitingDialog称为:
waitDlg = new WaitingDialog(null); // Parent is set to null
waitDlg.set("Checking....", "Components"); // Set 2 Labels
waitDlg.Title = "Installing...";
waitDlg.Show();
在上面的代码中,等待表单是可见的,但文本集是不可见的。标签的那个部分(文本大小)是白色背景,但没有可见的文本。
我必须在mainForm的Form_Load中执行此操作,就好像组件不在那里一样,然后mainForm安装它,并在waitingDlg表单上显示相应的消息。
如何以文本在waitingDlg表单中也可见的方式处理此问题?
等待对话框代码:
public partial class WaitingDialog : Form
{
private string title;
private string message;
private bool cancel;
private ParentForm myParent = null;
public WaitingDialog()
{
InitializeComponent();
Cancel = false;
this.StartPosition = FormStartPosition.CenterScreen;
}
public WaitingDialog(ParentForm parent) : this()
{
if (parent != null)
{
myParent = parent;
this.StartPosition = FormStartPosition.Manual;
}
}
public WaitingDialog(string title, string message)
: this()
{
label1.Text = title;
msgLbl.Text = message;
// Title = title;
// Message = message;
}
private void WaitingDialog_Load(object sender, EventArgs e)
{
}
public string Title
{
get { return title; }
set { title = value;
label1.Text = title;
Invalidate();
}
}
public string Message
{
get { return message; }
set { message = value;
msgLbl.Text = value;
Invalidate();
}
}
public void set(string title, string message)
{
Title = title;
Message = message;
}
public void set(string title, string message, bool showButton)
{
Title = title;
Message = message;
this.cancelBtn.Visible = showButton;
}
public void showCancelButton(bool showButton)
{
this.cancelBtn.Visible = showButton;
}
public bool Cancel
{
get { return cancel; }
set { cancel = value; }
}
private void cancelBtn_Click(object sender, EventArgs e)
{
Console.WriteLine("CANCEL BUTTON CAUGHT");
Cancel = true;
}
}
// TRIED CAlling as :
waitingDlg = new WaitingDialog("Installing", "Components");
waitingDlg.Text = "Install Components"; //CAN SEE THIS IN TITLE
waitingDlg.Show();
但标签文本不可见,其背景(文本大小)为白色。
希望这能有所帮助。如果你需要更多,很乐意分享更多。
感谢
检查WaitingDialog的构造函数是否调用;
InitializeComponent();
还要在表单加载中放置一个断点,并确保将要更新的标签的Text属性设置为waitDialog.Title属性。使用此断点还可以检查waitDialog.Title属性值。
因为我正在安装显示waitingDlg的组件。Hnece CPU一直很忙,因此UI线程无法绘制标签。我在后台线程的ReportProgress中显示并设置标签,并调用DoWork中的安装。
这解决了问题,并如预期的那样很好地显示了一切。
感谢大家的时间和努力。
感谢