■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#8222-0TextBoxのChangeの文字列についてやま2000-03-06(月) 20:27
     #8223-0RE#8222:TextBoxのChangeの文字列についてHIKARI2000-03-06(月) 21:18
     #8224-0RE#8222:TextBoxのChangeの文字列についてHIKARI2000-03-06(月) 21:19
     #8225-0RE#8222:TextBoxのChangeの文字列についてしげ2000-03-06(月) 22:08
     #8226-0RE#8225:TextBoxのChangeの文字列についてどらお2000-03-06(月) 23:41
#8222-0
TextBoxのChangeの文字列について
VB初心者です。 よろしくお願いいたします。
TextBoxのChangeで文字列のチェンジイベントをひろい、MsgBoxで その文字列を
表示しようとします。
その時、ひらがな や 漢字 などは、変換が終わった 1度だけ Change に ひっかかる
ようにしたいのですが、、、。なにか よい方法をご存知の方 よろしくお願いいたします。
※VBのデバッグでは 変換後 1度だけ メッセージボックスが表示されるのですが、これを
  コンパイルし 実行すると  変換文字数分 メッセージボックスが表示されます。
#8223-0
RE#8222:TextBoxのChangeの文字列について
> VB初心者です。 よろしくお願いいたします。
> TextBoxのChangeで文字列のチェンジイベントをひろい、MsgBoxで その文字列を
> 表示しようとします。
> その時、ひらがな や 漢字 などは、変換が終わった 1度だけ Change に ひっかかる
> ようにしたいのですが、、、。なにか よい方法をご存知の方 よろしくお願いいたします。
> ※VBのデバッグでは 変換後 1度だけ メッセージボックスが表示されるのですが、これを
>   コンパイルし 実行すると  変換文字数分 メッセージボックスが表示されます。
 Private Sub Text1_KeyPress(KeyAscii As Integer)
 Dim msg As String
     If KeyAscii = 13 Then
         KeyAscii = 0    'これがないとビープがなってしまう
         msg = Text1.Text
         MsgBox (msg)
     End If
 End Sub
#8224-0
RE#8222:TextBoxのChangeの文字列について
> VB初心者です。 よろしくお願いいたします。
> TextBoxのChangeで文字列のチェンジイベントをひろい、MsgBoxで その文字列を
> 表示しようとします。
> その時、ひらがな や 漢字 などは、変換が終わった 1度だけ Change に ひっかかる
> ようにしたいのですが、、、。なにか よい方法をご存知の方 よろしくお願いいたします。
> ※VBのデバッグでは 変換後 1度だけ メッセージボックスが表示されるのですが、これを
>   コンパイルし 実行すると  変換文字数分 メッセージボックスが表示されます。
 Private Sub Text1_KeyPress(KeyAscii As Integer)
 Dim msg As String
     If KeyAscii = 13 Then
         KeyAscii = 0    'これがないとビープがなってしまう
         msg = Text1.Text
         MsgBox (msg)
     End If
 End Sub
#8225-0
RE#8222:TextBoxのChangeの文字列について
> VB初心者です。 よろしくお願いいたします。
> TextBoxのChangeで文字列のチェンジイベントをひろい、MsgBoxで その文字列を
> 表示しようとします。
> その時、ひらがな や 漢字 などは、変換が終わった 1度だけ Change に ひっかかる
> ようにしたいのですが、、、。なにか よい方法をご存知の方 よろしくお願いいたします。
> ※VBのデバッグでは 変換後 1度だけ メッセージボックスが表示されるのですが、これを
>   コンパイルし 実行すると  変換文字数分 メッセージボックスが表示されます。


無理でしょう。
デバッグ時とコンパイル後で動作が異なるのは良くあることです。


次のコードを WinNT4(SP5) + VB6(SP3) + ATOK12 で確認したところ、

'------------------------------ 次のコードここから ----------
Private Sub Text1_Change()
    Me.Print ">> Text1_Change"
    MsgBox Text1.Text
    Me.Print "<< Text1_Change"
End Sub
'------------------------------ 次のコードここまで ----------

デバッグ時
0. テキストボックスに「しょぎょうむじょう」を入力し「諸行無常」と確定
1. フォームに">> Text1_Change"
2. ダイアログに「諸」と表示
3. ダイアログの[OK]を押したら、フォームに"<< Text1_Change"

コンパイル後
0. テキストボックスに「しょぎょうむじょう」を入力し「諸行無常」と確定
1. フォームに">> Text1_Change"
2. フォームに">> Text1_Change"
3. フォームに">> Text1_Change"
4. フォームに">> Text1_Change"
5. ダイアログに「諸行無常」と表示
6. ダイアログの[OK]を押したら、フォームに"<< Text1_Change"
7. ダイアログに「諸行無」と表示
8. ダイアログの[OK]を押したら、フォームに"<< Text1_Change"
9. ダイアログに「諸行」と表示
a. ダイアログの[OK]を押したら、フォームに"<< Text1_Change"
b. ダイアログに「諸」と表示
c. ダイアログの[OK]を押したら、フォームに"<< Text1_Change"


また、タイマーコントロールも張り付けて、
次のコードを WinNT4(SP5) + VB6(SP3) + ATOK12 で確認したところ、

'------------------------------ 次のコードここから ----------
Private Sub Form_Load()
    Timer1.Interval = 2000
    Timer1.Enabled = True
End Sub

Private Sub Text1_Change()
    Me.Print ">> Text1_Change"
    MsgBox Text1.Text
    Me.Print "<< Text1_Change"
End Sub

Private Sub Timer1_Timer()
    Text1.Text = Text1.Text + "a"
End Sub
'------------------------------ 次のコードここまで ----------

デバッグ時
0. テキストボックスに"z"を入力する
1. フォームに">> Text1_Change"
2. ダイアログに「z」と表示、ダイアログが出ている間タイマーのイベントは発生しない
3. ダイアログの[OK]を押したら、フォームに"<< Text1_Change"
この後 Timer イベントが発生した場合
4. フォームに">> Text1_Change"
5. ダイアログに「za」と表示
6. ダイアログの[OK]を押したら、フォームに"<< Text1_Change"


コンパイル後
0. テキストボックスに"z"を入力する
1. フォームに">> Text1_Change"
2. ダイアログに「z」と表示
3. ダイアログの[OK]を押さなければ Timer イベントが発生
4. フォームに">> Text1_Change"
5. 二つ目のダイアログに「za」と表示
6. 二つ目のダイアログの[OK]を押したら、フォームに"<< Text1_Change"
7. 一つ目のダイアログの[OK]を押したら、フォームに"<< Text1_Change"

備考
  5. の時には幾ら待っても三つ目の次の Timer イベントが発生せず
  6. と 7. の間で Timer イベントが発生すれば 4. に戻る



これらから推測されるのは

デバッグ時
MsgBox でダイアログ表示に掛かると、ボタンが押されるまで他のイベントが発生しない

コンパイル後
MsgBox 表示中でもイベントが発生する、タイミングによっては二つ以上表示されたり、
逆順で表示されたりする。
#8226-0
RE#8225:TextBoxのChangeの文字列について
#ChangeイベントやFocus系のイベントはデバッグ時とコンパイルしてExeにした時とで
動作が異なる事の多い、要注意項目なので極力仕様の見直しで対応した方がいいと思います(^^;)

お使いのVBのバージョンが判らないのですが、もしVB5以降であれば
コンパイル時の最適化オプションを選べるので色々条件を変更してコンパイルし直してみるのも
一つの手です。
ただし、こういう強引な事をやった場合OS周りの環境で動作が変わったりし易いので
必ず実行環境と同じOS、SP、IEでテストを行ってください。
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)