スクロールで停止させた後、再開させた時、文字を戻らなくするには?


メガネ  2007-03-24 01:31:44  No: 135857

また初心者的な質問で恐縮ですが
開始ボタンを押し、文字がスクロールさせ、停止ボタンを押して止め、また開始ボタンを押した際にスクロールが最初からになってしまいます
また途中で流す文字を変更した際に一旦流れきってから変更後の文字を流したいのですがわかりません
どなたかご教授お願いします
開始ボタン
 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
エラーメッセージも出ないので原因もわからないので全て張ってしまいましたが不快に感じてしまう方がいたら申し訳ありません


そがっち  2007-03-24 02:13:24  No: 135858

開始ボタンのクリックイベントでTextBox20.Textに値を入れてるんだから、
そりゃ初期化も されてしまいますよ(^^;

対処は…そうですねぇ、FormのLoadイベントあたりでTextBox20.Textを空にしておいて、
タイマーTickイベントで、「TextBox20.Textが空ならばTextBox19から文字列を持ってくる」として、
逆に、開始ボタンのクリックでは、TextBox20.Textを更新しないようにする、とか。

「文字列の変更」は、あくまで「開始」ボタンを押されて初めて適用ですか?
ならば、自力でフラグ管理するのが手っ取り早いかもしれませんね。
・フラグ(例えば Dim TextChanged as boolean = False)を準備しておいて
  「開始」ボタンを押されたら、そのフラグを立てる(BooleanならTrueにする、等)
  このフラグは、クラス変数(インスタンス変数)(…で いいんでしたっけ? 
  VB6で言うモジュールレベル変数)で定義してくださいね。
  解らなければ、「変数のスコープ」について調べてみてください。
・タイマーイベントの方では、「文字が流れきった」と判断した時点で
  上記のフラグを参照し、フラグが立っていたら新しい文字列を取得して
  更に「フラグを落とす(BooleanならFalseにする、等)」(←ここ重要)
…要は、「変更されたよ〜」という情報を持っておいて、反映したら
「反映したからさっきの『変更された』は無しね」と やるのを、
プログラムで実現するわけです。
(もうちょっとウマいやり方も あるかもですが、元COBOLerのクセなのか、
  どうもフラグ管理の力業に頼りがちになってしまう…)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加