gpt4 book ai didi

c# - 更改任何一个元素时如何保持 RichText 格式(粗体/斜体/等)?

转载 作者:可可西里 更新时间:2023-11-01 08:46:28 35 4
gpt4 key购买 nike

我有一个富文本框,其中可能包含一个字符串,该字符串具有粗体、斜体甚至不同字体和大小的元素。如果我选择整个字符串,包括所有差异,我如何才能“加粗”该字符串而不将整个字符串转换为仅具有“粗体”属性的通用字体?

例如:我想把“This is some text”变成“This is some text

请注意,“is some”仍然是斜体,“text”仍然是不同的字体。

我目前拥有的非常简单:

private void tsBold_Click(object sender, EventArgs e)
{
if (rtb.SelectionFont == null) return;

Font f;

if (tsBold.Checked)
f = new Font(rtb.SelectionFont, FontStyle.Bold);
else
f = new Font(rtb.SelectionFont, FontStyle.Regular);

rtb.SelectionFont = f;

rtb.Focus();
}

当然,这会将完全相同的字体应用于整个选择。有什么方法可以将“粗体”附加到现有字体吗?

回答虽然下面的“官方”答案只是冰山一角,但它是我在正确方向上所需要的插入力。谢谢你的提示。

这是我的官方修复:

我将其添加到我的 RichTextBox 对象中:

    /// <summary>
/// Change the richtextbox style for the current selection
/// </summary>
public void ChangeFontStyle(FontStyle style, bool add)
{
//This method should handle cases that occur when multiple fonts/styles are selected
// Parameters:-
// style - eg FontStyle.Bold
// add - IF true then add else remove

// throw error if style isn't: bold, italic, strikeout or underline
if (style != FontStyle.Bold
&& style != FontStyle.Italic
&& style != FontStyle.Strikeout
&& style != FontStyle.Underline)
throw new System.InvalidProgramException("Invalid style parameter to ChangeFontStyle");

int rtb1start = this.SelectionStart;
int len = this.SelectionLength;
int rtbTempStart = 0;

//if len <= 1 and there is a selection font then just handle and return
if (len <= 1 && this.SelectionFont != null)
{
//add or remove style
if (add)
this.SelectionFont = new Font(this.SelectionFont, this.SelectionFont.Style | style);
else
this.SelectionFont = new Font(this.SelectionFont, this.SelectionFont.Style & ~style);

return;
}

using (EnhancedRichTextBox rtbTemp = new EnhancedRichTextBox())
{
// Step through the selected text one char at a time
rtbTemp.Rtf = this.SelectedRtf;
for (int i = 0; i < len; ++i)
{
rtbTemp.Select(rtbTempStart + i, 1);

//add or remove style
if (add)
rtbTemp.SelectionFont = new Font(rtbTemp.SelectionFont, rtbTemp.SelectionFont.Style | style);
else
rtbTemp.SelectionFont = new Font(rtbTemp.SelectionFont, rtbTemp.SelectionFont.Style & ~style);
}

// Replace & reselect
rtbTemp.Select(rtbTempStart, len);
this.SelectedRtf = rtbTemp.SelectedRtf;
this.Select(rtb1start, len);
}
return;
}

然后我更改了点击方法以使用以下模式:

    private void tsBold_Click(object sender, EventArgs e)
{
enhancedRichTextBox1.ChangeFontStyle(FontStyle.Bold, tsBold.Checked);

enhancedRichTextBox1.Focus();
}

最佳答案

RTB 对此提供很好的支持。您甚至无法在选择范围内找到具有相同字体样式的字符范围。首先检查 SelectionFont 属性,如果选择包含多种样式,它将为 null。如果是这种情况,您必须通过设置 SelectionStart 和 SelectionLength 属性一次迭代选择一个字符,读取 SelectionFont 直到它发生变化。将更改后的字体应用于您发现的范围。

检查 this answer寻找一种保持这种速度相当快且无闪烁的方法。

请注意,使用 RTB 实现编辑器是 codeproject.com 上最受欢迎的主题。借用代码(如果不是整个项目)是减轻痛苦的好方法。

关于c# - 更改任何一个元素时如何保持 RichText 格式(粗体/斜体/等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5325918/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com