
C#で、例えばForm2をForm1から開き、ある問題があってForm2のボタンを押すとForm2のラベルに正解と表示されます。
その文字が表示されたら数秒後に自動でForm2が閉じられるプログラムを書きたいのですがうまくいきません。
現在、こう書いています。3秒後とします。
using System.Threading;は宣言しています。
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
if(label1.Text=="正解です。")
{
Thread.Sleep(3000);
e.Cancel= false;
}
こうするといつまでも閉じてくれません。
ボタンクリックプログラムに、if文で、~ならば正解です、~ならば間違いです、などとふり分けている中、正解のところに
label1.Text="正解です。";
Thread.Sleep(3000);
this.Close();
などとすると、ボタンを押したら、ラベルには何も表示されずに3秒後に閉じます。
どうすればいいでしょうか?
No.2ベストアンサー
- 回答日時:
というワケで簡単に。
# 手動で閉じた場合だとか、タイマーのキャンセルしてないとか…まあ、いろいろありますけど。
全角スペースでインデントしていますので、コピペする際にはご注意を。
public partial class Form1 : Form
{
private Timer CloseTimer;
public Form1()
{
InitializeComponent();
CloseTimer = new Timer();
CloseTimer.Stop();
CloseTimer.Interval = 3000;
CloseTimer.Tick += new EventHandler(CloseTimer_Tick);
}
void CloseTimer_Tick(object sender, EventArgs e)
{
this.Close();
}
private void button1_Click(object sender, EventArgs e)
{
label1.Text = "正解です。";
CloseTimer.Start();
}
private void button2_Click(object sender, EventArgs e)
{
label1.Text = "間違いです。";
}
}
No.1
- 回答日時:
>その文字が表示されたら数秒後に自動でForm2が閉じられるプログラムを書きたいのですがうまくいきません。
フォームにTimerクラスのフィールドを追加して、「正解」の文字列をラベルに設定したらタイマースタート。
タイマーの満了で自分自身でClose()メソッド呼べばいいんじゃないですかね?
http://msdn.microsoft.com/ja-jp/library/system.w …
>などとすると、ボタンを押したら、ラベルには何も表示されずに3秒後に閉じます。
イベントハンドラから抜けるまで3秒掛かります。
で、そのイベントハンドラを抜けた時点で
label1.Text="正解です。";
の描画が実行され、その直後に閉じます。
イベントハンドラ内で時間のかかる作業を行ってはいけません。
# と言いつつ、仕事で作ったヤツはしばらく時間かかる処理やってますけどね。
# おかげでプログラムがフリーズしたかのような反応になることも……。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
CloseとDisposeの違い
Visual Basic(VBA)
-
【C#】別フォームも同時に閉じるには?
C言語・C++・C#
-
-
4
ピクチャーボックスの大きさに合わせて画像を表示
Visual Basic(VBA)
-
5
Hideについて(.NET)
Visual Basic(VBA)
-
6
C# インスタンスの破棄
その他(プログラミング・Web制作)
-
7
別のフォームで記述している関数を実行するには?C#
C言語・C++・C#
-
8
C# シリアル通信でデータ受信時の欠損について
C言語・C++・C#
-
9
C# フォームを閉じてもプログラムが終了しない
C言語・C++・C#
-
10
Visual Studio 「AnyCpu」について
C言語・C++・C#
-
11
C# 超初心者です。 this.Refresh();という文を使いたいです
C言語・C++・C#
-
12
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#】別フォームも同時に閉じ...
-
OutLookのメール受信通知 (C#)
-
【C#】サブフォームからメイン...
-
C# フォームを閉じてもプログラ...
-
エクセルで作った新しいウイン...
-
Vba LongPtrについて教えてくだ...
-
グラフの交点の求め方(Excel)
-
「アイテムは収集されました」...
-
コントロールの書式設定で、“コ...
-
コンボボックス内の文字サイズ変更
-
検索の画面がでなくなってしま...
-
エクセルのコントロールツール...
-
ドロップダウンリストのフォン...
-
VB.NET2005 TextBox 高さ(Heig...
-
[VB.net] DataGridViewの列ヘッ...
-
ActiveXコントロールを.NETにイ...
-
スピンボタンを右クリックして...
-
DateTimePickerでに年月までし...
-
コモンダイアログコントロール...
-
VBAのフォント変更(エクセルか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#で、ある条件でFormが自動で...
-
【C#】別フォームも同時に閉じ...
-
C# フォームを閉じてもプログラ...
-
C# 自分自身のコントロールを指...
-
別フォームからdatagridviewの削除
-
【C#】サブフォームからメイン...
-
OutLookのメール受信通知 (C#)
-
C# FlowLayoutPanelのコントロ...
-
c#で次の次のフォームへのデー...
-
form2 から form1に戻ったとき...
-
ASP.NetでJavaScriptからポスト...
-
VB6においてのフォームの移動
-
VC++フォームアプリケーション ...
-
グラフの交点の求め方(Excel)
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
コントロールの書式設定で、“コ...
-
コンボボックス内の文字サイズ変更
-
Minecraft 統合版(PC)の描画距...
-
ラジオボタンの初期指定
おすすめ情報