我想制作一个让我想起事情的程序。我传递一个文本,时间以分钟为单位然后按下“记住”按钮。但是当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);
}
此处的图片:
信息: SO - Windows 10 15063.540 Visual Studio 17 - 版本15.2 Net Framework 4.5.2
答案 0 :(得分:1)
System.Timers.Timer不是在GUI线程上运行的计时器。要么使用WinForms计时器,要么在GUI线程上调用第二个表单:
this.BeginInvoke(new Action(() => {
Mensagem.texto = tboxLemb.Text;
Mensagem.Show();
}));
答案 1 :(得分:0)
确保您拥有:
public FormMens
{
InitializeComponent();
}