Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6 TextBoxの先頭が自動改行されてしまう)

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

このQ&Aのポイント
  • Visual Basic 6.0を使用してメモを作成する際、Text1からText2への転写は問題なく行えるが、2回目以降にText1の先頭が自動改行される現象が発生する。
  • Text1の先頭自動改行の件について、見た目の問題を解決する方法をお探しです。
  • VB6でのメモ作成時にText1の先頭自動改行が起きる問題があり、解決策をご教授いただけませんか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.13

>ただ、このコードでは、半角文字を2つ打った瞬間にText1の内容がすべて消えてしまいますので、全角のメモにしか使えません(vbの処理が追いつかないぐらい早く連打すればいけますが)。ですから、やはりText1へのvbCrLfをキャンセルしないといけないですね。 本来テキストボックスに入力する前に、Text1.Text = "" のようにクリアして置くべきで 当然投稿されたコード以外の所でクリアされている物と思っていたのですが。 下記を試して見て下さい。 Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then If Text2.Text = "" Then '1行目の書き込みの場合 Text2.Text = Text1.Text Else '2行目以降の書き込みの場合 Text2.Text = Text2.Text & vbCrLf & Text1.Text End If 'ここではText1.Text 内の vbCrLf が消えません。 Text1.Text = "" End If End Sub Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer) '下記のようにして消すか If KeyCode = 13 Then Text1.Text = "" End If End Sub 又は、 Private Sub Text1_GotFocus() '入力前に消すか '本来は、 Text1.Text = ""  ですが If Text1.Text = vbCrLf Then Text1.Text = "" End If End Sub >ところで、もしかして「VBレスキュー花ちゃん」の花ちゃん様でしょうか。 そうです。

Caryo_t
質問者

お礼

ご回答ありがとうございます。 >>ところで、もしかして「VBレスキュー花ちゃん」の花ちゃん様でしょうか。 >そうです。 そうでしたか。ここでお会いできるとは幸運です。 何年も、困ったときにはお世話になっています。 主に私は6.0を使っていますので、昔のものを残しておいていただいているのがとても助かります。 今後とも、できれば残しておいていただけますと、1ファンとしては嬉しいです。 >本来テキストボックスに入力する前に、Text1.Text = "" のようにクリアして置くべきで ちょうどチャットのように、書き込みながら履歴を参照するということをしたかったので、Enterのタイミングで消すことを前提にしていました。 いずれにいたしましても、KeyUpイベントを受けて If KeyCode = 13 Then Text1.Text = "" とすることで解決いたしました。 ありがとうございました。 この場をお借りして tissue001様、また、他の回答者の皆様にも心より御礼申し上げます。 ベストアンサーしか選べなくなっているため、解決方法を教えてくださったので、vbhanatyan様を選ばせていただきますが、あしからずご了承いただき、今後ともお知恵をお貸しいただけますようお願い申し上げます。

すると、全ての回答が全文表示されます。

その他の回答 (12)

  • tissue001
  • ベストアンサー率21% (28/132)
回答No.12

お騒がせいたしました。 今回、私が一番初めにe.Handled = Trueと回答した後に No.6さんが >End Sub の前に Keycode = 0 と入れてみたら? >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 >Keycode = 0 '←位置を変えたほうが良いかも >Text2.Text = mid(Text2.Text,3) '←乱暴な気がするけど・・ >End Sub Keycode = 0 '←位置を変えたほうが良いかも は試しましたか? Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then Keycode = 0 '←この位置にに変えてみて下さい。 Text2.Text = Text2.Text & vbclrf & Text1.Text Text1.Text = "" End If Text2.Text = mid(Text2.Text,3) '←乱暴な気がするけど・・ End Sub こうする事で、EnterをKeyDownからKeyUpまでをなかった事にしてくれるかもしれません。 なにぶんvb2008しかわかりません。

Caryo_t
質問者

お礼

ご回答ありがとうございます。 こちらこそ、お騒がせしており、申し訳ございません。 どうやらVB6は、変なところはいい加減なのに、ここは融通が利かないようで、キャンセルできませんでした。簡単っぽくみえるのですが、以外に難問ですね。

すると、全ての回答が全文表示されます。
  • tissue001
  • ベストアンサー率21% (28/132)
回答No.11

Caryo_t さんごめんなさい。 ちょっと引けなくなったので... >そもそも、下記コードで、Text1.Text に vbCrLf が入ると勘違いされているのが原因では。 >KeyDown イベントでは入力が確定していないので、Text1.Text には、 >vbCrLf が書き込まれていません。 >KeyUP イベントなら書き込まれますが。 vbcrlfが書き込まれるタイミングはわかりませんが、 質問内容の > 以下のプログラムによってこれを実装しようとしたところ つまりKeyUpまでを行っているんです。 ゆえに、質問者さんのText1にvbcrlfが書き込まれているんです。 質問者さんは、このText1に入るvbcrlfを取り消したいと言っているんです。 確かに1回目の実行時には、Text2は初めは空なので、1行目に改行は入るでしょう。 でも、それに対して困っているのではありません。 勿論、質問者さまは初めのあなたの回答に >この短いサンプルコードにも、いくつも不足している部分があって、お恥ずかしいです。 >Text2の一番初めには、そのような条件設定が必要になるようですので、 >気をつけます。ありがとうございました。 と言っています。 つまり、こんな事も考えなくてはいけないのですね...って事なのです。 Text2に意図しない改行が入るという事を今回質問したのではないのです。

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をキャンセルしないといけないですね。

すると、全ての回答が全文表示されます。
回答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レスキュー花ちゃん」の花ちゃん様でしょうか。 そうであるならば、光栄です。昔からいつも大変お世話になっております。

すると、全ての回答が全文表示されます。
  • tissue001
  • ベストアンサー率21% (28/132)
回答No.9

喧嘩しているつもりはないけど... 質問者さんの質問文 > 2回目以降はText1の1行目が自動的に改行された状態になってしまい、 > 必ず2行目から文章を打たなくてはいけないようになってしまいます。 > この1行目の「自動改行」をキャンセルする方法 あなたは、どう捉えますか? 私はText1に意図しない改行が入る事を防ぐ事は今回の質問者さんの質問だととらえます。 あなたは > 質問者が困っているのは、Text2.Text の先頭行に空行(VbCrLf だけの)が入ってしまうと > 言う事じゃないですか? だと言う。 Text2の先頭行に空白が入っているという文は、どこにも出てきません。 私は恥をかきましたか? どうでしょうか?

Caryo_t
質問者

お礼

質問を整理していただき、ありがとうございます。 これも横レスのようになってしまうのですが、仰るとおり「Text1に改行が入る」のが私の困っている点です。 Text1とText2ではなく、MotoTxtとSakiTxtとしておけばよかったですね。すみません。

すると、全ての回答が全文表示されます。
  • tissue001
  • ベストアンサー率21% (28/132)
回答No.8

喧嘩しているつもりはないけど... 質問者さんの質問ぶん > 2回目以降はText1の1行目が自動的に改行された状態になってしまい、 > 必ず2行目から文章を打たなくてはいけないようになってしまいます。 あなたは、どう捉えますか?

Caryo_t
質問者

お礼

コメントありがとうございます。 私に対するご質問ではないので、なんだか横レスのようになってしまって恐縮ですが、私の困っておりますのは「Text1に改行が入ること」です。 誤解を招いておりますのは私の書き方のようですので、何卒穏便にお力をお貸しいただければと思います。

すると、全ての回答が全文表示されます。
回答No.7

No.5 回答者:tissue001 回答日時:2011/01/26 11:52 よく試して書かないと恥をかくのは貴方ですよ。 >この回答は、質問者様がこまっているものとは違う種のものです。 元質問者が困っているのは、Text2.Text の先頭行に空行(VbCrLf だけの)が入ってしまうと 言う事じゃないですか? 元質問内容(Text1からText2への転写はうまくいくものの、2回目以降はText1の1行目が 自動的に改行された状態になってしまい...。) 勿論、それに対して答えた回答も間違っていませんよ。 No.6 で答えておられる if Text2.Text = "" then   Text2.Text = Text1.Text else   Text2.Text = Text2.Text & vbclrf & Text1.Text end if と同じ事です。

Caryo_t
質問者

お礼

ご回答、ありがとうございます。 少し離席している間に、多くの書き込みがあり、びっくりいたしました。 私の書き方が誤解を招いてしまっているようです。 Text2にも、確かに不必要な改行が入ってしまうかもしれませんが、今困っておりますのは、Text1に入る改行の方です。 つまり、Text1に文字を打って行き、その文字がEnterであれば、Text2にText1の内容をすべて移すということをしているのですが、Enterはこの「転写のきっかけ」であると同時に、Text1の中では「改行」の意味も持つため、Text1では常に1行目が改行されているようなのです。 ご回答に感謝いたしますとともに、わかりにくい質問文、そして不完全なコードで誤解を招いてしまいましたことをお詫びいたします。

すると、全ての回答が全文表示されます。
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.6

End Sub の前に Keycode = 0 と入れてみたら? 個人的にはText2.Textのいちばん最初に改行コードが入ってしまう方が気になるけど と思ったらレスがついてるので、 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 Keycode = 0 '←位置を変えたほうが良いかも Text2.Text = mid(Text2.Text,3) '←乱暴な気がするけど・・ End Sub とかでは? No4さんの方向だと if Text2.Text = "" then Text2.Text = Text1.Text else Text2.Text = Text2.Text & vbclrf & Text1.Text end if ということを言いたかったのでは?

Caryo_t
質問者

お礼

ご回答ありがとうございます。 なるほど、KeyCodeを0にしてキャンセルするのですね。 結果としてはうまくいかなかったのですが、たいへんさんこうになりました。ありがとうございます。 ところで、最後でMidを使うと奇妙な動きをしますね。順を追って理解すれば解るのですが、面白いと思いました。

すると、全ての回答が全文表示されます。
  • tissue001
  • ベストアンサー率21% (28/132)
回答No.5

> Text2.Text="" の時に下記のコードを実行すると >>Text2.Text = Text2.Text & vbclrf & Text1.Text >空のText2.Text に vbclrf & Text1.Text を書き込む事になり >先頭行が改行だけの空行ができるのです。 これは間違いです。 Text2.TextはText2.Text & vbclrf & Text1.Text が入ります。 >従って、 >If Text2.Text="" Then >Text2.Text = Text1.Text >End If これは間違いなので、従わないでください。 >この種の事は、vbclrf を前に付けるか、後ろにつけるかによって >同様の処理をする必要があります。 この回答は、質問者様がこまっているものとは違う種のものです。

Caryo_t
質問者

お礼

ご指摘、ありがとうございます。 tissue001さんの仰るとおりした。テキストの処理は、ケアレスミスが多いので、大変参考になりました。ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.4

Text2.Text="" の時に下記のコードを実行すると >Text2.Text = Text2.Text & vbclrf & Text1.Text 空のText2.Text に vbclrf & Text1.Text を書き込む事になり 先頭行が改行だけの空行ができるのです。 従って、 If Text2.Text="" Then Text2.Text = Text1.Text End If のように条件設定をする必要があります。 この種の事は、vbclrf を前に付けるか、後ろにつけるかによって 同様の処理をする必要があります。

Caryo_t
質問者

お礼

ご回答ありがとうございます。 この短いサンプルコードにも、いくつも不足している部分があって、お恥ずかしいです。 Text2の一番初めには、そのような条件設定が必要になるようですので、気をつけます。ありがとうございました。 追伸 もしかして「VBレスキュー花ちゃんの」花ちゃん様でしょうか。

すると、全ての回答が全文表示されます。
  • tissue001
  • ベストアンサー率21% (28/132)
回答No.3

No.2です。 補足です。 要はText1でのKeyDoown時にEnterが押されたのを取り消してあげればいいのです。 KeyDown時にEnterを認識して改行が入っています。

Caryo_t
質問者

お礼

重ねてのご回答、ありがとうございます。 そうですね。何らかの方法でできると思いますので、探してみます。原因をご指摘いただき、ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A