2017-08-22 12 views
0

私は物事を思い出させるプログラムを作りたいと思います。私はテキストを渡し、分単位で時間を入力してから、覚えておいてください。しかし、Form2がメッセージと共に開くと、要素のどれも表示されません。 Form2は背景だけを表示し、 "Blz"ボタンやラベルは表示されません。私のform2は正しく表示されません/

以下、関連すると思われるコードスニペットを残します。残りの部分は、単純なルーチンを持つボタンです。例えば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(); 
    } 

フォーム2(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); 
    } 

IMAGES:

Form1

Form2

情報: SO - Windowsの10 15063.540 のVisual Studio 17 - バージョン15.2 ネットフレームワーク4.5.2

答えて

1

でSystem.Timers.Timerが稼働タイマーではありませんGUIスレッドWinFormsタイマーを使用するか、GUIスレッドで2番目のフォームを起動してください。

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

それは動作します!多くのおかげさまで、素晴らしい一日を過ごしました! –

0

あなたが持っていることを確認してください:

public FormMens 
{ 
    InitializeComponent(); 
} 
+0

これはこの権利です。ありがとう! –

関連する問題