VB6.0で開発したアプリケーションをクライアントアプリとして
不特定多数のユーザに配布しています。
その際、以下のような問題が発生しました。
「OSがWindows2000の場合にテキストボックスに"・・"と表示されるデータがある」
「WindowsXPだと同じデータを同じテキストボックスに出力しても表示されない」
この"・・"の正体は、改行コードです。
テキストボックスにデータ入力する際、Excelのセルなどを直接コピーして
貼り付けると一緒に入力されてしまうアレです。
対処方法としては、テキストボックスに改行コードが存在した場合は
削除してしまえば問題ないのですが、そもそもなぜWindows2000では表示されるものが
WindowsXPでは表示できないのでしょうか?
これをWindowsXPでも表示可能にする方法をご存知の方、
いらっしゃいましたらご回答をいただけたらと思います。
宜しくお願いいたします。
> 「OSがWindows2000の場合にテキストボックスに"・・"と表示されるデータがある」
.MulitiLine = False な TextBox なのでしょうか?
(.MulitiLine = True の方だとしたら、CR+LF が改行を意味します)
> この"・・"の正体は、改行コードです。
これは、CR+LF の事ですか?
(改行コードと一口に言っても、幾つかの種類がありますよね)
http://www.unipad.org/unimap/index.php?page=detail¶m_char=000D
http://www.unipad.org/unimap/index.php?page=detail¶m_char=000A
http://www.unipad.org/unimap/index.php?page=detail¶m_char=2028
http://www.unipad.org/unimap/index.php?page=detail¶m_char=2029
> テキストボックスにデータ入力する際、Excelのセルなどを直接コピーして
> 貼り付けると一緒に入力されてしまうアレです。
Excel からのコピーの場合、行の区切りに使われるのは CR+LF(0D 0A)、
セル内での改行に関しては、LF(0A) となりますね。
Private Sub Form_Load()
Text1.Font.Name = "MS ゴシック"
Text1.Font.Charset = 128
Text1.Text = "A" & vbCr & "B" & vbCrLf & "C" & vbLf & "D"
End Sub
> WindowsXPでは表示できないのでしょうか?
『メモ帳』での表示結果も異なるようなので、そういうものなのでしょう。
一応、Forms 2.0 TextBox ver 11.0 であれば、化けて表示させる事も
できるようですが、基本的には「無理」としておいた方が無難でしょう。
>.MulitiLine = False な TextBox なのでしょうか?
そうです。FalseなTextBoxです。
>これは、CR+LF の事ですか?
そうです。説明不足ですみません。
> 一応、Forms 2.0 TextBox ver 11.0 であれば、化けて表示させる事も
> できるようですが
【Forms 2.0 Object Library】というコントロールでしょうか?
バージョン情報の表記までは確認出来ませんでした。
ただ、アプリケーション中にテキストボックスが多数あり全てを
差し替えるわけにはいきません。
Windows2000とWindowsXPでこのような違いが出る理由などはご存知でしょうか?
私のところでは再現しないのでなんですが
(..がでません。 旗みたいので表示してる..)
WindowsXPだとスタイルによってコントロールを分けるのでは
ないでしょうか?
スタイルをWindowsクラシックにするとWindows2000と同じになるかも
(未確認です。ごめんなさい。)
あんさんのOSがWindows2000で、
"・・"が表示されないということでしょうか?
ということは、Windows2000とWindowsXPの問題ではなく
何か別のところに原因があるのでしょうか?
ますます分からなくなってきました(;つД`)
自開発のソフトであれば、MulitiLineをTrueに変更できないんでしょうか?
まぁそうなると仕様上問題が出てくるのかもだけど
あと、それはWindowsの仕様でしょうから、2000だから、XPだから、ということをここで論議してもはじまらないのではないかと
>あと、それはWindowsの仕様でしょうから、2000だから、XPだから、ということをここで論議してもはじまらないのではないかと
顧客に説明するとき、必要になると思いますよ。
>スタイルをWindowsクラシックにするとWindows2000と同じになるかも
確かめて見ましたか?
こちらでもメモ帳で現象確認できました。
WindowsXPのスタイルを変更しても無理みたいです。
> 自開発のソフトであれば、MulitiLineをTrueに変更できないんでしょうか?
それはできないんです。
アプリケーション上、項目は10バイト、12バイト等固定長なので。
改行されてしまっても困りますし・・・。
>> あと、それはWindowsの仕様でしょうから、2000だから、XPだから、ということをここで論議してもはじまらないのではないかと
> 顧客に説明するとき、必要になると思いますよ。
おっしゃるとおりです。
ユーザは、
「同じアプリ使っていてなんで表示が違うの?」
って言っているんです。
「OSが違うからです」
で納得してくれないので今回の質問に至っています。
> こちらでもメモ帳で現象確認できました。
> WindowsXPのスタイルを変更しても無理みたいです。
検証ありがとうございます。
ということは、Windows2000でも"・・"を表示させないように
修正するしかなさそうですね・・・。
だから、自分が言いたいのは
>>2000だから、XPだから、ということをここで論議してもはじまらないのではないかと
なので
改行コードを表示しない解決策を考えたいのですよね?
「・・」にこだわりすぎだと思うんですよ
1:テキストボックスの横にでもコマンドボタンを設置して、貼り付けボタンとする
2:ボタンが押されたらクリップボードの中身を文字列変数に入れる
3:文字列変数から改行コードを抜き取ったものをテキストボックスに入れる
でいいと思いますがどうでしょうか?
>改行コードを表示しない解決策を考えたいのですよね?
>「・・」にこだわりすぎだと思うんですよ
表示しない解決策ではなくて、「表示したい」のです。
表示させない方法であれば、最初の質問でも記載させていただきましたが
表示対象のデータ中に改行コードが存在した場合は、削除してしまえば
なんの問題もありません。
2000では表示されるものがXPではなぜ表示されないのか。
XPとVB6.0の相性が悪いのか?XPのバグなのか?2000が元々バグっていたのか。
ユーザに表示できるかできないか、できないならなぜ?ということを
説明しなければなりません。
何卒よろしくお願いいたします。
じゃぁ改行コード消してそこに「・・」入れれば?
>XPとVB6.0の相性が悪いのか?XPのバグなのか?2000が元々バグっていたのか。
>ユーザに表示できるかできないか、できないならなぜ?ということを
>説明しなければなりません。
改行コード表示に対応していないコントロール(テキストボックス)に
改行コードを表示しようとしているのが無茶な仕様であって、いうなれば
文字化けした結果が表示されたものが”・・”である。事実、改行コード
以外でも、表示できない文字コードを入れれば同じ処理になる。
もともと、仕様外の使い方をしているので、マイクロソフトが動作保証
していない部分であり、OSのバージョンアップに伴い、そこの処理を
変えたと考えられるが、技術情報を聞き出すことはできないし、
対応もできない。
表示させたいのであれば改行を表す表示可能な文字列を決め、
それに置き換えることにより、OSに依存せず共通の表示が
可能である。(注:根拠はありません。適当に予想しただけです。)
…というかマイクロソフトに聞けば、分かったような分からないような
例文を返してくれるんじゃないかと。それを参考にするとかw。
皆さんありがとうございました。
とりあえずユーザにはうまいこと説明します。
Windows2000から化けコード表示を
消す方向で調整したいと思います。
ツイート | ![]() |