DOBON.NET DOBON.NETプログラミング掲示板過去ログ

文字をカウントして、動的文字表示の切り替え

環境/言語:[Visual Basic 2005]
分類:[.NET]

Timer1のIf nagasa > 300 Thenで文字をカウントして1文字ずつ300文字、文字を動的表示させて、文字が切り替わるようにしたいです。Timer1.Stopで300文字表示で動的表示を停止させることは出来ました。
動的な文字の切り替え方は、いろいろ探しましたが、どうしても見つかりません。
Timer1とOpenFileDialog1とButton1とTextbox1を配置して下記のコードを試してください。
よろしくお願いします。

Public Class Form1
Private strbuff As String
Private nagasa As Integer = 0

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
TextBox1.Text = Microsoft.VisualBasic.Left(strbuff, nagasa)
nagasa += 1
If nagasa > Len(strbuff) Then
nagasa = 0
End If


If nagasa > 300 Then

End If

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Clear()
If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
strbuff = My.Computer.FileSystem.ReadAllText(Me.OpenFileDialog1.FileName, System.Text.Encoding.GetEncoding("shift_jis"))
TextBox1.Text = strbuff
End If
End Sub



End Class
申し訳ありませんが、「動的な文字の切り替え方」というのが、具体的に何をしたいのか全く分かりません。もし300文字以降の文字列を何文字か取得したいということであれば、String.Substringメソッド(VB.NETではMid関数でもできます)を使ってください。
■No22982に返信(管理人さんの記事)
> 申し訳ありませんが、「動的な文字の切り替え方」というのが、具体的に何をしたいのか全く分かりません。もし300文字以降の文字列を何文字か取得したいということであれば、String.Substringメソッド(VB.NETではMid関数でもできます)を使ってください。

OpenFileDialog1でテキストファイルを開いて、Timer1で文字をパワーポイントのように動かして、300文字文字を表示すると、前の文字を消去(1文字目に戻)して、1文字目の文字の場所に次の文字(301文字から601文字、602文字から902文字・・・)テキストの最後までこのように文字表示を繰り返すという感じです。

Timer1に下記を追加記述して、300文字表示で1文字目の場所に文字を戻すことは成功しました。


If nagasa >300 Then
nagasa =0
End If
prog248 さん

テキストBOX内でテキストをスライドさせて表示させたいと言うことでしょうか?

>TextBox1.Text = Microsoft.VisualBasic.Left(strbuff, nagasa)
でLeftではなく、管理人さんが書かれているように、
String.Substringメソッドを使ってみてください。
■No22982に返信(管理人さんの記事)
> 申し訳ありませんが、「動的な文字の切り替え方」というのが、具体的に何をしたいのか全く分かりません。もし300文字以降の文字列を何文字か取得したいということであれば、String.Substringメソッド(VB.NETではMid関数でもできます)を使ってください。

1文字ずつ文字の動的表示をして、300文字表示すると、表示を切り替えることができました。
ありがとうございました。


Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
TextBox1.Text = Microsoft.VisualBasic.Left(strbuff, nagasa)
nagasa += 1
If nagasa > Len(strbuff) Then
nagasa = 0
End If

If nagasa > 300 Then
TextBox1.Text = TextBox1.Text.Substring(300)


End If


If nagasa > 600 Then
TextBox1.Text = TextBox1.Text.Substring(300)
End If

If nagasa > 900 Then
TextBox1.Text = TextBox1.Text.Substring(300)
End If

If nagasa > 1200 Then
TextBox1.Text = TextBox1.Text.Substring(300)
End If

If nagasa > 1500 Then
TextBox1.Text = TextBox1.Text.Substring(300)
End If


End Sub


現在、300文字表示で表示の切り替えをして、600文字表示で表示の切り替えという風に1つ1つ記述していますが、これを簡単に短く、1つのコードで繰り返し300文字表示するごとに文字を切り替えるにはどのようにすればよろしいでしょうか?
■No23004に返信(prog248さんの記事)
300,600,900・・・の方も変数にして Substring の処理を
実行したら300足せばいいのでは?
■No23005に返信(るしぇさんの記事)
> ■No23004に返信(prog248さんの記事)
> 300,600,900・・・の方も変数にして Substring の処理を
> 実行したら300足せばいいのでは?

返信が遅れてすいません。
300,600,900・・・を変数にするには、どのようにすればよいのでしょうか?
よろしくお願いします。
■No23042に返信(prog248さんの記事)
> 300,600,900・・・を変数にするには、どのようにすればよいのでしょうか?

???
・・・
うそでしょ?(^^;
変数って分かります?

nagasa は変数ですよね?値を入れられますよね?
もう一つ変数を用意して置き換えてください。
Ifで判定したらその変数に300足してください。
>nagasa += 1
nagasa に1足せるんだから、新しい変数に300
足せますよね?
■No23043に返信(るしぇさんの記事)
> ■No23042に返信(prog248さんの記事)
>>300,600,900・・・を変数にするには、どのようにすればよいのでしょうか?
>
> ???
> ・・・
> うそでしょ?(^^;
> 変数って分かります?
>
> nagasa は変数ですよね?値を入れられますよね?
> もう一つ変数を用意して置き換えてください。
> Ifで判定したらその変数に300足してください。
> >nagasa += 1
> nagasa に1足せるんだから、新しい変数に300
> 足せますよね?

変数の組み合わせ方がわかりません。
今までは、記述した分だけページも切り替えることが出来ました。
それを1つの記述で、無限に動作させるようにしたかったのですが、
無限に1ページ目の文字を切り替えることは出来ました。ですが、文字が2ページ目に切り替わりません。
nagasaと新しい変数をどのように組み合わせたらよいのでしょうか?


Public Class Form1
Private strbuff As String
Private kiroku As Integer
Private nagasa As Integer

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
TextBox1.Text = Microsoft.VisualBasic.Left(strbuff, nagasa)
nagasa += 1
If nagasa > Len(strbuff) Then
nagasa = 0
End If

If nagasa > 300 Then
TextBox1.Text = TextBox1.Text.Substring(300)

nagasa = kiroku
kiroku += 300



End If



End Sub
■No23069に返信(prog248さんの記事)
『置き換える』の日本語の意味は分かりますか?
必要最低限の処理のみ追加し、処理の流れを変えないように心掛けてください。
受けた助言は素直にそのまま受け取ってみてください。

[ステップ1]期待する結果が得られることを確認
If nagasa > 300 Then
    TextBox1.Text = TextBox1.Text.Substring(300)
End If
If nagasa > 600 Then
    TextBox1.Text = TextBox1.Text.Substring(300)
End If

[ステップ2]300,600,900・・・変数に置き換え
Private kiroku As Integer
kiroku = 300
If nagasa > kiroku Then
    TextBox1.Text = TextBox1.Text.Substring(300)
End If
kiroku = kiroku + 300
If nagasa > kiroku Then
    TextBox1.Text = TextBox1.Text.Substring(300)
End If

[ステップ3]タイマーの動きを考えて、どこで kiroku を更新すればいいのか考える
(実際はどこで足せばいいか回答済み)
If nagasa > kiroku Then
    TextBox1.Text = TextBox1.Text.Substring(300)
    kiroku += 300
End If
■No23077に返信(るしぇさんの記事)
> ■No23069に返信(prog248さんの記事)
> 『置き換える』の日本語の意味は分かりますか?
> 必要最低限の処理のみ追加し、処理の流れを変えないように心掛けてください。
> 受けた助言は素直にそのまま受け取ってみてください。
>
> [ステップ1]期待する結果が得られることを確認
> If nagasa > 300 Then
> TextBox1.Text = TextBox1.Text.Substring(300)
> End If
> If nagasa > 600 Then
> TextBox1.Text = TextBox1.Text.Substring(300)
> End If
>
> [ステップ2]300,600,900・・・変数に置き換え
> Private kiroku As Integer
> kiroku = 300
> If nagasa > kiroku Then
> TextBox1.Text = TextBox1.Text.Substring(300)
> End If
> kiroku = kiroku + 300
> If nagasa > kiroku Then
> TextBox1.Text = TextBox1.Text.Substring(300)
> End If
>
> [ステップ3]タイマーの動きを考えて、どこで kiroku を更新すればいいのか考える
> (実際はどこで足せばいいか回答済み)
> If nagasa > kiroku Then
> TextBox1.Text = TextBox1.Text.Substring(300)
> kiroku += 300
> End If
>

試行錯誤していました。
現在は、まだできそうにありませんが、しばらく期間を置いてまた挑戦してみます。

DOBON.NET | プログラミング道 | プログラミング掲示板