我的form2没有显示/正常工作

时间:2017-08-22 20:00:54

标签: c# winforms

我想制作一个让我想起事情的程序。我传递一个文本,时间以分钟为单位然后按下“记住”按钮。但是当Form2打开并显示消息时,不会显示任何元素。 Form2仅显示背景,没有“Blz”按钮或标签。

下面我留下我认为相关的代码片段。其余的只是具有简单例程的按钮,例如电源示例this.Hide()或this.WindowState = FormWindowState.Minimized。

Form1代码

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Timers;

namespace Alerta
{
    public partial class Form1 : Form
    {
        FormMens Mensagem = new FormMens(); //it's form2
        System.Timers.Timer tempo;

    ...

    private void buttonLembrar_Click(object sender, EventArgs e)
    {
        this.Hide();
        tempo = new System.Timers.Timer() { Enabled = true };
        tempo.Interval = (Decimal.ToInt32(numericMinutos.Value) * 60) * 1000 + 0.001;
        tempo.Elapsed += Lembrete;
        tempo.Start();
    }

    private void Lembrete(Object source, ElapsedEventArgs e)
    {
        tempo.Stop();

        Mensagem.texto = tboxLemb.Text;
        Mensagem.Activate();
        Mensagem.TopMost = true;
        Mensagem.Show();
    }

Form2(FormMens)

using System;
using System.Drawing;
using System.Windows.Forms;

namespace Alerta
{
    public partial class FormMens : Form
    {
        public string texto;

    ...

    private void btFec_Click(object sender, EventArgs e)
    {
        this.Hide();
        Application.OpenForms["Form1"].Show();
    }

    ...

    private void FormMens_Activated(object sender, EventArgs e)
    {
        this.tboxTexto.Text = this.texto;
        //Console.Beep(400, 800);
    }

此处的图片:

Form1

Form2

信息: SO - Windows 10 15063.540 Visual Studio 17 - 版本15.2 Net Framework 4.5.2

2 个答案:

答案 0 :(得分:1)

System.Timers.Timer不是在GUI线程上运行的计时器。要么使用WinForms计时器,要么在GUI线程上调用第二个表单:

this.BeginInvoke(new Action(() => {
  Mensagem.texto = tboxLemb.Text;
  Mensagem.Show();
}));

答案 1 :(得分:0)

确保您拥有:

public FormMens 
{
    InitializeComponent();
}