他の要素はそのままで太字のみを設定しています。
RichTextBoxの選択部分の太字、斜体、アンダーラインなどを変更するにはどうすればいいのでしょうか?
これも新しくFontオブジェクトのインスタンスを新たに生成して、それをFontプロパティにセットするしかないようです。
太字にするのであれば
1 2 |
Font oldFont = richTextBox1.SelectionFont; Font font = new Font(oldFont, FontStyle.Bold); |
また複数の文字が選択されていてフォントがバラバラだとrichTextBox1.SelectionFontはnullを返すので注意が必要です。
またこのやり方では斜体やアンダーラインが設定されている場合、これが消えてフォントスタイルはBoldだけになってしまいます。
1 2 |
Font oldFont = richTextBox1.SelectionFont; Font font = new Font(oldFont, oldFont.Style | FontStyle.Bold); |
これだとこれまでのスタイルにBoldが追加されるようになります。
では太字を解除するには?
1 2 |
Font oldFont = richTextBox1.SelectionFont; Font font = new Font(oldFont, oldFont.Style & ~FontStyle.Bold); |
FontStyle.Boldを反転させてそれとの論理積をとればFontStyle.Boldは外れるというわけです。
それではデータが同期されたRichTextBoxでもフォントスタイルの変更をやってみましょう。
1 2 3 4 5 6 7 |
// Bold, Italic, Underline, Strikeoutを追加するか取り除くか、そのままにしておくか enum StyleChangeEnum { Add = 0, Remove = 1, NoChange = 2, } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
public partial class SyncRichTextBox : UserControl { void SetStyle(StyleChangeEnum bold, StyleChangeEnum italic, StyleChangeEnum underline, StyleChangeEnum strikeout) { int start = SelectionStart; int length = SelectionLength; RichTextBox r = new RichTextBox(); r.SelectedRtf = SelectedRtf; int len1 = r.Text.Length; if (len1 == 0) return; string action = "SelectionFontStyle"; if (bold == StyleChangeEnum.Add) action += " Bold"; if (bold == StyleChangeEnum.Remove) action += " Bold"; if (italic == StyleChangeEnum.Add) action += " Italic"; if (italic == StyleChangeEnum.Remove) action += " Italic"; if (underline == StyleChangeEnum.Add) action += " Underline"; if (underline == StyleChangeEnum.Remove) action += " Underline"; if (strikeout == StyleChangeEnum.Add) action += " Strikeout"; if (strikeout == StyleChangeEnum.Remove) action += " Strikeout"; for (int i = 0; i < len1; i++) { r.Select(i, 1); Font oldFont = r.SelectionFont; FontStyle newStyle = oldFont.Style; if (bold == StyleChangeEnum.Add) newStyle |= FontStyle.Bold; if (bold == StyleChangeEnum.Remove) newStyle = newStyle &= ~FontStyle.Bold; if (italic == StyleChangeEnum.Add) newStyle |= FontStyle.Italic; if (italic == StyleChangeEnum.Remove) newStyle = newStyle &= ~FontStyle.Italic; if (underline == StyleChangeEnum.Add) newStyle |= FontStyle.Underline; if (underline == StyleChangeEnum.Remove) newStyle &= ~FontStyle.Underline; if (strikeout == StyleChangeEnum.Add) newStyle |= FontStyle.Strikeout; if (strikeout == StyleChangeEnum.Remove) newStyle &= ~FontStyle.Strikeout; Font newFont = new Font(oldFont, newStyle); r.SelectionFont = newFont; } r.SelectAll(); string rtf = r.SelectedRtf; r.Dispose(); if (SelectedRtf == rtf) return; if (SetSelectedRtf(rtf, action)) { var buf = Data.GetUndobuf(); buf.newSelectionStart = start; buf.newSelectionLength = length; SelectionStart = start; SelectionLength = length; } } } |
プロパティで簡単に設定と解除ができるようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
public partial class SyncRichTextBox : UserControl { public bool SelectionBold { get { if (richTextBoxEx1.SelectionFont == null) return false; return richTextBoxEx1.SelectionFont.Bold; } set { StyleChangeEnum style = StyleChangeEnum.Add; if (!value) style = StyleChangeEnum.Remove; SetStyle(style, StyleChangeEnum.NoChange, StyleChangeEnum.NoChange, StyleChangeEnum.NoChange); } } public bool SelectionItalic { get { if (richTextBoxEx1.SelectionFont == null) return false; return richTextBoxEx1.SelectionFont.Italic; } set { StyleChangeEnum style = StyleChangeEnum.Add; if (!value) style = StyleChangeEnum.Remove; SetStyle(StyleChangeEnum.NoChange, style, StyleChangeEnum.NoChange, StyleChangeEnum.NoChange); } } public bool SelectionUnderline { get { if (richTextBoxEx1.SelectionFont == null) return false; return richTextBoxEx1.SelectionFont.Underline; } set { StyleChangeEnum style = StyleChangeEnum.Add; if (!value) style = StyleChangeEnum.Remove; SetStyle(StyleChangeEnum.NoChange, StyleChangeEnum.NoChange, style, StyleChangeEnum.NoChange); } } public bool SelectionStrikeout { get { if (richTextBoxEx1.SelectionFont == null) return false; return richTextBoxEx1.SelectionFont.Strikeout; } set { StyleChangeEnum style = StyleChangeEnum.Add; if (!value) style = StyleChangeEnum.Remove; SetStyle(StyleChangeEnum.NoChange, StyleChangeEnum.NoChange, StyleChangeEnum.NoChange, style); } } } |