从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();

但标签文本不可见,其背景(文本大小)为白色。

希望这能有所帮助。如果你需要更多,很乐意分享更多。

感谢

从mainForm调用其他窗体-其他窗体的组件不可见

检查WaitingDialog的构造函数是否调用;

InitializeComponent();

还要在表单加载中放置一个断点,并确保将要更新的标签的Text属性设置为waitDialog.Title属性。使用此断点还可以检查waitDialog.Title属性值。

因为我正在安装显示waitingDlg的组件。Hnece CPU一直很忙,因此UI线程无法绘制标签。我在后台线程的ReportProgress中显示并设置标签,并调用DoWork中的安装。

这解决了问题,并如预期的那样很好地显示了一切。

感谢大家的时间和努力。

感谢