• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6 TextBoxの先頭が自動改行されてしまう)

VB6 TextBoxの先頭が自動改行される件について

vbhanatyanの回答

回答No.10

>> 2回目以降はText1の1行目が自動的に改行された状態になってしまい、 >> 必ず2行目から文章を打たなくてはいけないようになってしまいます。 >あなたは、どう捉えますか? Text2.Text = Text2.Text & vbclrf & Text1.Text では Text2.Text に何も書き込まれていない状態の時にvbCrLf & Text1.Text がかきこまれるので 改行する必要が無い状態で改行しているから先頭行が vbCrLf だけの空行ができるのです。 そもそも、下記コードで、Text1.Text に vbCrLf が入ると勘違いされているのが原因では。 Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then Text2.Text = Text2.Text & vbclrf & Text1.Text Text1.Text = "" End If End Sub KeyDown イベントでは入力が確定していないので、Text1.Text には、vbCrLf が書き込まれて いません。 KeyUP イベントなら書き込まれますが。 Form にテキストボックス2個貼り付けて下記コードを試して見て下さい。 Text1 に 1 2 3 a 個別にキー入力して見て下さい。 () Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 65 Then Text2.Text = Text2.Text & vbCrLf & Text1.Text Text1.Text = "" End If End Sub

Caryo_t
質問者

お礼

コメントありがとうございます。 >Text2.Text = Text2.Text & vbclrf & Text1.Text では >Text2.Text に何も書き込まれていない状態の時にvbCrLf & >Text1.Text がかきこまれるので >改行する必要が無い状態で改行しているから先頭行が >vbCrLf だけの空行ができるのです。 これは知りませんでした。 ご教授いただいたコードを試してみましたところ、たしかにText1に「a」が取り残されたまま、123だけがText2に移りました。 これと同様にして、「改行」が取り残されたまま、Text1の内容がText2に移っているのですね。あとは改行を失くすだけですが、Text1.Text=""で改行が消えないのが不思議ですね…。 いや、よく考えると不思議でもないのでしょうか。もう少し考えてみます。

Caryo_t
質問者

補足

他の方へのお礼と一部重複いたします無礼をお許し下さい。 お二人のコメントを通じ、Text1にvbCrLfが書き込まれるタイミングがKeyUp時であることが判りましたので、KeyUp時にText1の長さを調べて、それが2であったなら(つまり改行だけであったなら)Text1の内容を消すようにしてみました。 このコードでは、Text2の先頭の改行は消していませんが、これはvbhanatyan様のご回答をもとに対応しようと思います。 Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then If Text1.Text <> "" Then Text2.Text = Text2.Text & vbCrLf & Text1.Text Text1.Text = "" End If End If End Sub Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer) If Len(Text1.Text) = 2 Then Text1.Text = "" End Sub ただ、このコードでは、半角文字を2つ打った瞬間にText1の内容がすべて消えてしまいますので、全角のメモにしか使えません(vbの処理が追いつかないぐらい早く連打すればいけますが)。ですから、やはりText1へのvbCrLfをキャンセルしないといけないですね。 ところで、もしかして「VBレスキュー花ちゃん」の花ちゃん様でしょうか。 そうであるならば、光栄です。昔からいつも大変お世話になっております。

関連するQ&A

  • テキストボックスのエンターキー無効

    VB6.0について質問いたします。 テキストボックスの入力の際に改行を強制的にできないように制御したいのですが次のプログラムでは上手くいきませんでした。 Private Sub Text_KeyDown(KeyCode As Integer, Shift As Integer) If vbcode = vbKeyReturn Then Exit Sub End If End Sub エンターキーを押したとき何も実行しないようにするにはどうしたらいいですか? テキストボックスはスクロールバーを設置してMultiLine プロパティをtrueに設定しています。

  • テキストボックスでMAX文字数を入れたらTABで飛びたい

    テキストボックスで、2バイト入力されたらTABで次のテキストボックス に移動すると言うイベントを4つのテキストボックスのKeyUpイベント に記述しました。 サンプルとして一つ書きます。 Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer) If Len(Text1.Text) = 2 Then SendKeys "{TAB}" KeyCode = 0 End If End Sub 上記のソースでプログラムを実行し、Text1に2バイト入力されると、 次のテキストボックス(Text2)に移動します。 更にText2,Text3に、2バイト入力しますと、カーソルがText4に来ます。 ここで、マウスでText1にカーソルを持っていき、値を変更すると、 Text2に移動するはずが、Text4にカーソルが移動します。 なぜでしょうか?? くだらない質問ですが、よろしくお願いします。

  • ユーザーフォームのTextBoxの操作について

    皆様、こんにちは。 いつもお世話になっております。 ユーザーフォームのテキストボックスに何も入力されていないと自動的に0が表示されるようにしたいですが、エラーが出てしまいます。 具体的に、 1テキストボックス 2テキストボックス ・・・ 合計テキストボックス があって、詳細が分からなくて合計のテキストボックスにのみ入力する時に、合計テキストボックスをクリックしたときにその他のボックスに0が表示されるように書きたいです。 Private Sub TextBox9_Enter() Dim i As Integer For i = 1 To 8 If TextBox(i).Text = "" Then TextBox(i).Text = "0" End If Next i End Sub のように考えましたが、間違っていますね。 教えていただければ幸いです。 どうぞよろしくお願いいたします。

  • VB2008改行できません

    VB2008改行できません お願いします。 メロンパン 3個 240円 コロッケパン 2個 … という風にしたいのですが、 一行目が表示され、2行目の「コロッケパン」を入れた瞬間、 1行目が消え、 コロッケパンのみが表示されます。 なぜでしょうか。 正しいコードと、どのような理屈でそうなるのか頂けると嬉しいです。 Public Class Form1 Dim cm, a As String Dim kosu, en As Integer Private Sub ShapeComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ShapeComboBox.SelectedIndexChanged cm = ShapeComboBox.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click kosu = TextBox1.Text Select Case ShapeComboBox.SelectedIndex Case 0 en = kosu * 120 Case 1 en = kosu * 180 Case 2 en = kosu * 240 End Select txtKaimono.Text = cm + kosu.ToString(" ##個") + en.ToString(" #,###円") + vbCrLf End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Application.Exit() End Sub End Class

  • TextBox内で日本語入力中を判断する方法

    TextBox内で「Enter」PUSHの有無を下記コードで実現しておりますが Private Sub TextBox1_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then     処理 End If End Sub 日本語変換の際(もじ→文字)の「Enter」を処理対象外にする方法を教えていただけないでしょうか? もしくは日本語入力中を判断する方法を教えていただけないでしょうか? 言語はVB6.0です。 よろしくお願い致します。

  • vb コンボボックスのイベントについて

    こんばんわ。 コンボボックスで、 指定の値をマウス操作でクリックしたときと、 キーボードの上下で、移動後returnを押したときだけ、 MsgBox "処理実行" を実行したいです。 keystateを使ってみたのですが、前の情報が残っているのかうまくいきません。keystateの情報をクリアさせるか、シンプルに上記を動作させる何かよい方法はありますでしょうか。 Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer Dim flg1 As Boolean Private Sub form_load() Combo1.AddItem (11) Combo1.AddItem (22) Combo1.AddItem (33) Combo1.AddItem (44) End Sub Private Sub Combo1_Keyup(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then 'return flg1 = True Call Combo1_click End If End Sub Private Sub Combo1_click() If (GetKeyState(&H26) <> 0) Or (GetKeyState(&H28) <> 0) Then ' ↑↓ If flg1 = False Then Exit Sub End If End If MsgBox "処理実行" flg1 = False End Sub

  • エクセル VBA タブストップに対する質問2

    下記の「エクセル VBA タブストップに対する質問」に書き込みした者ですが、一難去ってまた一難です。又、暗雲が漂ってきました。 条件は下記といっしょで テキストボックスが1~5まであり、テキストボックス2~4まではデータが入っています。 全てのTabStopはTrue、TabIndexは順に1~5が入っています。 テキストボックス1に何もデータを入れないで、Enterが押された場合、 テキストボックス1をアクティブにしたいのですが、下記で質問した回答で動かしても、きちんと動いてくれません。 どうかご指導よろしくお願いいたします。 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then 'ENTER If TextBox1.Value = "" Then TextBox1.SetFocus End If End If End Sub このコードでテキストボックス1に何も入れずにEnterを押すとテキストボックス2がアクティブになってしまいます。

  • 特定の文字だけ太文字にするには・・

    簡易チャット作ってます。発言者の名前の部分だけ太文字にしようとしてい ます。 テキストボックス2に文を書いてエンターを押すとテキストボックス1に書 花子:~~~  と書き込まれるようにはできました。花子の部分 だけふと文字にするには?? Private Sub Text2_KeyPress(KeyAscii As Integer) If (KeyAscii = 13) Then Text1.Text = Text1.Text + "花子:" + Text2.Text + vbCrLf Text2.Text = "" KeyAscii = 0 End If End Sub

  • VB6.0 KeyDownイベントの対応

    VB6.0を使ってプログラム中ですが、下記の  Command10_KeyDown で、複合キー「 Ctrl + ↓」 だとイベント KeyDown を受信できるのですが、単純な キー「↓」だと、イベント KeyDown を受信でず、他のボタンにフォーカスが移ってしまいます。 Comman10_GotFocus に何か対応策を入れて、単純な キー「↓」のイベント KeyDown を受信する方法はないでしょうか? Private Sub Command10_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 40 Then execsub001() End If End Sub Private Sub Commnad10_Click() execsub001() End Sub Private Sub Comman10_GotFocus() 上記問題への対応策を此処に記述したい End If Private Sub execsub110() 内容は省略 End Sub

  • VBのプログラム

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Not Integer.TryParse(TextBox1.Text, rows) OrElse _ Not Integer.TryParse(TextBox2.Text, columns) OrElse _ Not Integer.TryParse(TextBox3.Text, number) Then MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If Me.Bounds = New Rectangle(10, 10, 1300, 900) Dim cnt As Integer = 0 For k As Integer = 1 To number For i As Integer = 1 To rows For j As Integer = 1 To columns Dim tb As TextBox = New TextBox() cnt += 1 tb.Name = "tb" + cnt.ToString() Me.Controls.Add(tb) tb.Top = (i - 1) * 20 + 70 tb.Left = (j - 1) * 50 + 60 * (columns * (k - 1)) + 5 tb.Width = 55 Next Next Next End Sub これはボタンを押すと テキストボックスに入力された値分だけテキストボックスが出てくるというものです。 例えば 3 4 4とテキストボックスに値が入力された場合 3行4列が4個分テキストボックスが出てきます。 しかし6 6 6と入力した場合画面に入りきらなくなってしまいます。 大きな値を入力しても画面に入れたいです。 これはスクロールなどしてできるようにしたいです。 どのようなソースでできるのでしょうか。