アプリ版:「スタンプのみでお礼する」機能のリリースについて

毎年初心者で、77歳になりました。よろしくお願いします。
visual basic studio express 2013 で勉強しています。

Imports System.Threading.Thread
Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Sleep(1000)
Application.DoEvents()
TextBox1.Text = "kingdom" & vbCrLf
Sleep(5000)
Application.DoEvents()
TextBox1.Text &= "koseki tosihiro"
End Sub
End Class

このように一つの関数(なんと言えばいいのですか?)
の中に 二つの slleep(1000),sleep(5000) を使う事はできないのですか?かなり時間がたって
表示されます。

A 回答 (2件)

>二つの slleep(1000),sleep(5000) を使う事はできないのですか?


使えます。

Sleep(1000)
TextBox1.Text = "kingdom" & vbCrLf
Application.DoEvents()
Sleep(5000)
TextBox1.Text &= "koseki tosihiro"
Application.DoEvents()

のようにしてください。
テキストボックスに文字をセットした後で、
Application.DoEvents()
を呼び出すと、直ちに表示が可能になります。
    • good
    • 0
この回答へのお礼

早々に回答をいただきましてありがとうございます。二度目の
Application.DoEvents()を書くべき位置がおかしいということですか
やってみます。

お礼日時:2017/02/05 10:37

※ 厳密にはちょっと違いますが。



Windowsでは、画面の書き換えが常に行われているわけではありません。
通常は「何もしていないタイミング」を狙って画面を書き換えます。

本来なら、あなたのそのプログラムだと Button1_Click が始まったときから、画面書き換えは一切行われず、
End Subへ達して終了した段階で「何もしていない状態」になることで、それまでの内容をまとめて画面が書き換えられます。
つまり、内部ではTextBox1.Textが書き変わっているのに、画面上では時間が経った後に

kingdom
koseki tosihiro

が一気に表示される、ということになります。

それを強制的に一時的に「何もしていない状態」にするための命令が Application.DoEvents() です。
ですが、あなたのプログラムの場合は
TextBox1.Text = "kingdom" & vbCrLf
 でTextBox1.Textの内容を変えた後
Sleep(5000)
 で待ってから
Application.DoEvents()
 で画面が書き変わって「kingdom」が表示される、という流れになるため、DoEventsが働いていないように見えてしまいます。




なお。
DoEventsは弊害が多いので、多用すべきものではありません。
画面表示だけなら TextBox1.Refresh() 等と Refreshメソッドを使うことで即時に表示更新することができます。

また、時間がかかる処理はバックグラウンドでするのが作法となります。
ちょっと難しいところですが。
    • good
    • 0
この回答へのお礼

ありがとうございました。私は、ただsleep()とはどんなものか確認したかったのです。textbox1.refresh() で 使ったことがのが出て。これは textbox1,text=" " と
同じことではないのですか? このようにわつぃは全くの初心者です。
今後ともよろしくお願いします。

お礼日時:2017/02/05 10:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!