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

  • 質問

  • visual basic 2010を用いて,ソフト開発を行っています.フォーム上に設置したテキストボックスに数字「10」を入力して,フォームを起動すると絵文字に変換されてしまいます.

    今までにこのようなことは生じたことがありません.他のvbnetで作成したアプリケーションソフトではこのようなことは起こっていないので,このソフトだけに生じているものと思われます.

    今まで正常に数字として表示されていた古いバージョンのプログラムをvisual basic 2010で起動しても,実行ファイルを起動しても同様な結果となります.

    デバグモードで入力したテキストボックスの内容を見てみましたが,数字となっており,テキストボックス上の表示だけが絵文字に変換されているようです.

    visual basic 2017から起動しても同様なエラーを生じます.

    OSはWindows10です,

    2018年6月9日 9:45

回答

  • 新規に作成したプロジェクトなど、ほかのプロジェクトでは起きていないという理解で合っていますか?

    そのフォームの Load イベントあたりに、 Me.Text = TextBox1.Font.FontFamily.Name と書いてフォームのタイトルに出てくるフォント名を確認してみるのも1つかもしれません。
    Wingdings のように、普通の文字が絵文字になるフォントはありますので、予期しないフォントになっていないかを確認するためとして。

    変なフォントになっていたことが確認できた場合は、テキストボックス自身、あるいはその親のパネルやコントロール類を順次見ていって、フォント名がどうなっているかを確認してください。
    変なフォント名にはなっていないが、実行時に変わってしまうのであれば、そのフォントが Windows に存在するかを確認してください。
    存在しない場合は実行時に別のフォントで扱われる可能性があるためです。

    • 回答としてマーク happy1234 2018年6月11日 1:03
    • 回答としてマークされていない happy1234 2018年6月11日 1:04
    • 回答としてマーク happy1234 2018年6月11日 1:05
    2018年6月9日 10:36
    モデレータ

すべての返信

  • 新規に作成したプロジェクトなど、ほかのプロジェクトでは起きていないという理解で合っていますか?

    そのフォームの Load イベントあたりに、 Me.Text = TextBox1.Font.FontFamily.Name と書いてフォームのタイトルに出てくるフォント名を確認してみるのも1つかもしれません。
    Wingdings のように、普通の文字が絵文字になるフォントはありますので、予期しないフォントになっていないかを確認するためとして。

    変なフォントになっていたことが確認できた場合は、テキストボックス自身、あるいはその親のパネルやコントロール類を順次見ていって、フォント名がどうなっているかを確認してください。
    変なフォント名にはなっていないが、実行時に変わってしまうのであれば、そのフォントが Windows に存在するかを確認してください。
    存在しない場合は実行時に別のフォントで扱われる可能性があるためです。

    • 回答としてマーク happy1234 2018年6月11日 1:03
    • 回答としてマークされていない happy1234 2018年6月11日 1:04
    • 回答としてマーク happy1234 2018年6月11日 1:05
    2018年6月9日 10:36
    モデレータ
  • よくわかりませんが、OS側の問題かもしれません。

    (参考)
    フォントキャッシュを削除でWin10の文字化けが解決
    http://blog.livedoor.jp/dokkuriponkan/archives/48835486.html


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    2018年6月9日 12:53
    モデレータ
  • 回答有り難うございます.コーディングミスであることが分かりました.

    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

    2018年6月11日 1:17