Вызов другой формы из mainForm - компоненты не видны из другой формы - PullRequest
0 голосов
/ 22 июня 2011

В моей mainForm я проверяю установленные compoenets в его Form_Load.Если они не установлены, я вызываю другую форму (WaitingDialog), чтобы показать состояние установки.Я называю waitDialog следующим образом:

    waitDlg = new WaitingDialog(null); // Parent is set to null
    waitDlg.set("Checking....", "Components"); // Set 2 Labels
    waitDlg.Title = "Installing...";
    waitDlg.Show();

С помощью приведенного выше кода форма ожидания видна, но текстовый набор не виден.Эта часть (размер текста) метки имеет белый фон, но текст не виден.

Я должен выполнить это в Form_Load только mainForm, как будто там нет компонент, тогда mainForm установит его и на экране появится сообщение о подтверждении.Форма waitDlg.

Как обработать это так, чтобы текст также отображался в форме 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 голосов
/ 22 июня 2011

Как я делаю установку компонентов при отображении waitDlg.Таким образом, процессор остается занятым и, следовательно, поток пользовательского интерфейса не может рисовать метки.Я показываю и устанавливаю метки в ReportProgress моего фонового потока и вызываю установку в DoWork.

Это решило проблему и показывает все красиво, как и ожидалось.

Спасибо всем вам за ваше время иусилия.

Спасибо

0 голосов
/ 22 июня 2011

Убедитесь, что конструктор WaitingDialog вызывает;

InitializeComponent();

Также установите точку останова в загрузке формы и убедитесь, что вы устанавливаете свойство Text метки, которую хотите обновить, в свойство waitDialog.Title. Используйте эту точку останова для проверки значения свойств waitDialog.Title.

...