Form1_Shownのタイミングについて

解決


中家  2023-09-01 10:00:02  No: 151068  IP: [192.*.*.*]

PictureBoxに座標を書いておきたいのですが、Form1_Shown、Form1_Activated、どちらも間に合わないのか表示されません。MessageBox.Show(" Shownイベント")で止めてやると表示できます。System.Threading.Thread.Sleep(5000)を入れてみましたがダメでした。原因と対策を教えてください。実行ファイルでも同じでした。

編集    削除
とめ  2023-09-04 08:53:47  No: 151072  IP: [192.*.*.*]

>MessageBox.Show(" Shownイベント")で止めてやると表示できます。
その状態で、メモ帳など別のアプリのウィンドウを上に重ねた後、そのウィンドウを
取り除くと描画が消えませんか?消えるなら、再描画を考慮できていないことになります。

通常、コントロールへの描画はPaintイベントを利用します。
「C# picturebox 描画 消える」のキーワードでWEB検索に引っ掛かる内容を確認して下さい。

編集    削除
中家  2023-09-05 17:35:33  No: 151078  IP: [192.*.*.*]

とめさん
アドバイスありがとうございます。
別のアプリ(Firefox)のウィンドウを上に重ねた後、そのウィンドウを取り除いても描画が残っています。
あきらめて描画ボタンを設けてしのいだのですが、こんどはTextboxでも同じようなことが起こって困っています。
VS2019のVBで測定プログラムを作っています。私、VBは初心者です。
インターバルをおいて電圧変化させたいのですが、タイマーを入れるとTextboxが更新されず、最後の値だけが表示されます。
System.Threading.Thread.Sleep(1000) と ネット検索で見つけたWait(500)関数も試しました。
表示先のTextBox14内へもタイマーを入れてみましたが同じ結果でした。
Console出力はタイマーの前に変化しますが表示が変わりません。
何か根本が間違っているんだと思うのです。
結構時間を費やしているので、もう一日ダメだったら端末にタイマーを入れようかと悩んでいます。
    Private Sub TextBox14_TextChanged(sender As Object, e As EventArgs) Handles TextBox14.TextChanged
        Console.WriteLine(TextBox14.Text)
        Wait(1000)
        'MessageBox.Show(TextBox14.Text)


 Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
        Dim i As Integer
        For i = 0 To LastMeasVoltNo
            'System.Threading.Thread.Sleep(1000)
            'Wait(500)
            TextBox14.Text = MeasVolt(i + 1)
            'MessageBox.Show(MeasVolt(i))
        Next
    End Sub

 Private Sub Wait(ByVal waittime As Long)
        Dim starttime As Long
        starttime = timeGetTime()
        Do While timeGetTime() - starttime < waittime
        Loop
    End Sub

編集    削除
中家  2023-09-05 18:29:31  No: 151079  IP: [192.*.*.*]

描画の前へ、PictureBox1.Update()
TextBoxは後へTextBox14.Update()
を入れるといい感じで表示できました。

編集    削除