VB.NET です。
リッチテキストコントロールで
フォント名 MSゴシック 標準 サイズ10で
Textプロパティに半角で"dousiteda" とします。
これを実行し、画面に表示されたリッチテキストコントロールには
当然に"dousiteda"と表示されています。
ここでそれに続けて半角で"d"と入力すると明らかに先にプロパティで
設定した"d"と文字形状が異なっています。
これはどういうことで生じるのでしょうか?
同じにならなければおかしいと思うのですが?私の考え違いでしょうか?
どなたか、お分かりになる方ご教授いただけませんか?
自己レスです。とりあえず以下の方法で解決?しました。
RichTextBox1_TextChangedの中でTextbox1.Text=RichTextBox1.Rtfとして
その振る舞いを調べてみました。結果、以下のようなコードにてプロパティ
ウィンドウで指定したときにデザインウィンドウの中のリッチテキストボックスに表示される書体と同じ書体で描画できることがわかりました。
Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
Static ch As Boolean = False
If ch = False Then
tmpSelStart = RichTextBox1.SelectionStart
ch = True
End If
RichTextBox1.Rtf = Replace(RichTextBox1.Rtf, "\fswiss\fcharset0 Arial;", "\fnil\fcharset128 \'82\'6c\'82\'72 \'83\'53\'83\'56\'83\'62\'83\'4e;")
If ch = True Then
RichTextBox1.SelectionStart = tmpSelStart
ch = False
End If
End Sub
もちろんReplace文の中の置き換える対象文・置き換える文は書体によって変わってきます。
結構悲惨なことになってますね。(^^;
IMEモードになってないと自動的にSystem Fontに切り替わってしまうのが原因か?
VB.NETのRichTextBoxはVB6のそれとかなり違ってますが、これは仕様なんでしょうかね。。。
RichTextBox1_TextChangedの度にReplaceでは、テキストのサイズが大きくなると、かなり重くなると思われ。
こっちの方が多少軽いかな。
Private Fnt As Font
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Fnt = New Font(RichTextBox1.Font.Name, RichTextBox1.Font.Size, RichTextBox1.Font.Style)
End Sub
Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles RichTextBox1.TextChanged
RichTextBox1.Font = Fnt
End Sub
ねろ様、ありがとうございます。
確かにテキストの量が増えると重くなりますね。
ソースの可読性もねろ様が提示してくださったものの方がよいので
利用させていただきます。