また初心者的な質問で恐縮ですが
開始ボタンを押し、文字がスクロールさせ、停止ボタンを押して止め、また開始ボタンを押した際にスクロールが最初からになってしまいます
また途中で流す文字を変更した際に一旦流れきってから変更後の文字を流したいのですがわかりません
どなたかご教授お願いします
開始ボタン
Dim z As String
z = TextBox19.Text
TextBox20.Text = z
Timer1.Enabled = True
Timer1.Enabled = True
停止ボタン
Timer1.Enabled = False
タイマー
Dim dd As Long
Dim ee As Long
dd = 54
ee = Len(TextBox20.Text)
If ee = dd Then
TextBox20.Text = Trim(TextBox20.Text)
Else
TextBox20.Text = TextBox20.Text + " "
End If
エラーメッセージも出ないので原因もわからないので全て張ってしまいましたが不快に感じてしまう方がいたら申し訳ありません
開始ボタンのクリックイベントでTextBox20.Textに値を入れてるんだから、
そりゃ初期化も されてしまいますよ(^^;
対処は…そうですねぇ、FormのLoadイベントあたりでTextBox20.Textを空にしておいて、
タイマーTickイベントで、「TextBox20.Textが空ならばTextBox19から文字列を持ってくる」として、
逆に、開始ボタンのクリックでは、TextBox20.Textを更新しないようにする、とか。
「文字列の変更」は、あくまで「開始」ボタンを押されて初めて適用ですか?
ならば、自力でフラグ管理するのが手っ取り早いかもしれませんね。
・フラグ(例えば Dim TextChanged as boolean = False)を準備しておいて
「開始」ボタンを押されたら、そのフラグを立てる(BooleanならTrueにする、等)
このフラグは、クラス変数(インスタンス変数)(…で いいんでしたっけ?
VB6で言うモジュールレベル変数)で定義してくださいね。
解らなければ、「変数のスコープ」について調べてみてください。
・タイマーイベントの方では、「文字が流れきった」と判断した時点で
上記のフラグを参照し、フラグが立っていたら新しい文字列を取得して
更に「フラグを落とす(BooleanならFalseにする、等)」(←ここ重要)
…要は、「変更されたよ〜」という情報を持っておいて、反映したら
「反映したからさっきの『変更された』は無しね」と やるのを、
プログラムで実現するわけです。
(もうちょっとウマいやり方も あるかもですが、元COBOLerのクセなのか、
どうもフラグ管理の力業に頼りがちになってしまう…)
ツイート | ![]() |