|
分類:[.NET 全般]
いつもお世話になっております、ホエホエです。
タイトルにもありますが、リッチテキストボックスの タブ幅を文字数で設定したいのですがうまくいきません。
Googleで検索していろいろと方法が出てきたのですが、文字数からピクセル数を計算し Windows APIのSendMessageにて設定しようと思い下記コードになりました。
const int EM_SETTABSTOPS = 0x00CB;
[DllImport( "User32.dll" )] static extern IntPtr SendMessage( IntPtr hWnd, int msg, int wParam, int[] lParam );
private void button1_Click( object sender, EventArgs e ) { using( Graphics grpText = richTextBox1.CreateGraphics() ) { int nTabCharNum = (int)4; int nTabWidth = (int)(richTextBox1.Font.SizeInPoints * 96 / 72 / 2 * nTabCharNum);
SendMessage( richTextBox1.Handle, EM_SETTABSTOPS, 1, new int[] { nTabWidth } ); } richTextBox1.Text = "12345678901234567890\r\n\tAAA"; }
上記のタブ文字数4(半角単位)として実行すれば私としては1234.....の次に改行されて、 「AAA」と言う文字が「5」の直下に来る予定が「6」の直下に来てと1文字ほどズレてしまい、 設定するタブ文字数を大きくすればするほどズレ文字数が大きくなってしまいます。 タブのピクセルサイズ計算に何か誤りがあるのか、それとももっと根本的に問題あるのか…
他にもリッチテキストのグラフィックを取得しMeasureStringメソッドでサイズを取得する方法も 試してみましたがダメでした。
ちなみに環境は Windows7 VisualStudio2010 です。
ご存知の方、教えてください。
|