
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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#】別フォームも同時に閉じ...
-
「アイテムは収集されました」...
-
エクセルで作った新しいウイン...
-
グラフの交点の求め方(Excel)
-
コントロールの書式設定で、“コ...
-
検索の画面がでなくなってしま...
-
ActiveXコントロールを.NETにイ...
-
VB.NET2005 TextBox 高さ(Heig...
-
Sendkeysのタイミング
-
コンボボックス内の文字サイズ変更
-
DateTimePickerでに年月までし...
-
C#でファイル転送プログラムWin...
-
リストコントロール(MFC or API...
-
MFCタブコントロールのグラデー...
-
3次元空間上の2つの座標から...
-
ダイアログボックスのボタンコ...
-
VB6,リストボックスの特定行の...
-
static 文字が上に張り付いて・...
-
18マスの左の方3×3のマス目を自...
-
作成したウインドウのサイズを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# フォームを閉じてもプログラ...
-
C# FlowLayoutPanelのコントロ...
-
【C#】別フォームも同時に閉じ...
-
C#で、ある条件でFormが自動で...
-
C# 自分自身のコントロールを指...
-
C#でテキストボックスをクリッ...
-
c#で次の次のフォームへのデー...
-
コンボボックスのイベントについて
-
【C#】サブフォームからメイン...
-
ASP.NetでJavaScriptからポスト...
-
ラベルの透過について
-
form2 から form1に戻ったとき...
-
エクセルで作った新しいウイン...
-
グラフの交点の求め方(Excel)
-
「アイテムは収集されました」...
-
皆さん、おはようございます♪ ...
-
コントロールの書式設定で、“コ...
-
勝手にウィンドウが開いて止ま...
-
コンボボックス内の文字サイズ変更
-
エクセルのコントロールツール...
おすすめ情報