从mainForm调用其他表单 - 其他表单不可见的组件

时间:2011-06-22 07:46:18

标签: c# winforms text label visibility

在我的mainForm中,我在其Form_Load中检查已安装的compoenet。如果没有安装,我会调用另一个Form(WaitingDialog)来显示instalaltion的状态。我将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中执行此操作,就好像componetns不在那里,然后mainForm安装它,approp消息显示在waitingDlg表单上。

如何以waitDlg形式显示文本的方式处理此问题?

WaitingDialog代码:

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

但标签文字无法显示,其背景(文字大小)为白色。

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

由于

2 个答案:

答案 0 :(得分:0)

检查WaitingDialog调用的构造函数;

InitializeComponent();

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

答案 1 :(得分:0)

因为我在显示waitingDlg时正在对组件进行instalaltion。 Hnece CPU保持忙碌,因此UI线程无法绘制标签。我在后台线程的ReportProgress中显示并设置标签,并在DoWork中调用lthe安装。

这解决了问题,并按预期显示了一切。

感谢你们所有人的时间和努力。

由于