トップ回答者
テキストボックスの入力数字(デザイン時)が実行時に絵文字に変換される

質問
-
visual basic 2010を用いて,ソフト開発を行っています.フォーム上に設置したテキストボックスに数字「10」を入力して,フォームを起動すると絵文字に変換されてしまいます.
今までにこのようなことは生じたことがありません.他のvbnetで作成したアプリケーションソフトではこのようなことは起こっていないので,このソフトだけに生じているものと思われます.
今まで正常に数字として表示されていた古いバージョンのプログラムをvisual basic 2010で起動しても,実行ファイルを起動しても同様な結果となります.
デバグモードで入力したテキストボックスの内容を見てみましたが,数字となっており,テキストボックス上の表示だけが絵文字に変換されているようです.
visual basic 2017から起動しても同様なエラーを生じます.
OSはWindows10です,
回答
-
新規に作成したプロジェクトなど、ほかのプロジェクトでは起きていないという理解で合っていますか?
そのフォームの Load イベントあたりに、 Me.Text = TextBox1.Font.FontFamily.Name と書いてフォームのタイトルに出てくるフォント名を確認してみるのも1つかもしれません。
Wingdings のように、普通の文字が絵文字になるフォントはありますので、予期しないフォントになっていないかを確認するためとして。変なフォントになっていたことが確認できた場合は、テキストボックス自身、あるいはその親のパネルやコントロール類を順次見ていって、フォント名がどうなっているかを確認してください。
変なフォント名にはなっていないが、実行時に変わってしまうのであれば、そのフォントが Windows に存在するかを確認してください。
存在しない場合は実行時に別のフォントで扱われる可能性があるためです。
すべての返信
-
新規に作成したプロジェクトなど、ほかのプロジェクトでは起きていないという理解で合っていますか?
そのフォームの Load イベントあたりに、 Me.Text = TextBox1.Font.FontFamily.Name と書いてフォームのタイトルに出てくるフォント名を確認してみるのも1つかもしれません。
Wingdings のように、普通の文字が絵文字になるフォントはありますので、予期しないフォントになっていないかを確認するためとして。変なフォントになっていたことが確認できた場合は、テキストボックス自身、あるいはその親のパネルやコントロール類を順次見ていって、フォント名がどうなっているかを確認してください。
変なフォント名にはなっていないが、実行時に変わってしまうのであれば、そのフォントが Windows に存在するかを確認してください。
存在しない場合は実行時に別のフォントで扱われる可能性があるためです。 -
よくわかりませんが、OS側の問題かもしれません。
(参考)
フォントキャッシュを削除でWin10の文字化けが解決
http://blog.livedoor.jp/dokkuriponkan/archives/48835486.html★良い回答には質問者は回答済みマークを、閲覧者は投票を!
-
回答有り難うございます.コーディングミスであることが分かりました.
Controls(i).Font = New Font(" ", Controls(i).Font.Size * Ratio * 0.9)
この中の「" "」を「Controls(i).Font.FontFamily」や「MS UI Gothic」に変更すると問題なく数字として表示されました.
しかし,上記コーデングでテキストボックス内の数字がある時点から急に絵文字になった原因は分かりません.参考のために絵文字になったソースを付け加えます.Ratioは画面の拡大・縮小率です.
' フォーム上に該当するコントロールを探して拡大・縮小
For i = 0 To Controls.Count - 1
' ラベル、ボタン、テキストボックス、チェックボックス
If TypeOf Controls(i) Is Label Or TypeOf Controls(i) Is Button Or
TypeOf Controls(i) Is TextBox Or TypeOf Controls(i) Is CheckBox Then
Controls(i).Font = New Font(" ", Controls(i).Font.Size * Ratio * 0.9)
Controls(i).Width = Ratio * Controls(i).Width
Controls(i).Height = Ratio * Controls(i).Height
Controls(i).Top = Ratio * Controls(i).Top
Controls(i).Left = Ratio * Controls(i).Left
' グループボックス,ラジオボタン
ElseIf TypeOf Controls(i) Is GroupBox Or TypeOf Controls(i) Is RadioButton Then
Controls(i).Font = New Font(" ", Controls(i).Font.Size * Ratio * 0.9)
Controls(i).Width = Ratio * Controls(i).Width
Controls(i).Height = Ratio * Controls(i).Height
Controls(i).Top = Ratio * Controls(i).Top
Controls(i).Left = Ratio * Controls(i).Left
For Each cControl As Control In Controls(i).Controls
If cControl.Font.Size < 10 Then
cControl.Font = New Font(" ", cControl.Font.Size * Ratio * 0.9)
End If
cControl.Width = Ratio * cControl.Width
cControl.Height = Ratio * cControl.Height
cControl.Top = Ratio * cControl.Top
cControl.Left = Ratio * cControl.Left
Next
' ピクチャーボックス、プログレスバー
ElseIf TypeOf Controls(i) Is PictureBox Or TypeOf Controls(i) Is ProgressBar Then
Controls(i).Width = Ratio * Controls(i).Width
Controls(i).Height = Ratio * Controls(i).Height
Controls(i).Top = Ratio * Controls(i).Top
Controls(i).Left = Ratio * Controls(i).Left
End If
Next i