0

我正在使用 VS2010、C# 开发 WinForm 应用程序,有没有办法在文本框中使用两种字体?例如,我的用户使用 Tahoma 字体键入,然后他可以按组合键或单击按钮,然后他可以使用 Times New Roman 字体键入(使用 Tahoma 键入的文本不应更改其字体)

我有什么选择?我想 RichTextBox 是我唯一的选择,对吗?如果是这样,如何删除 RichTextBox 图标和工具栏?

Telerik 或其他第三方组件呢?

4

2 回答 2

2

正如你所说,RichTextBox将帮助你做你所要求的。但是,我不明白您关于删除图标和工具栏的说法。恰恰相反,您必须创建自己的按钮才能启用格式化。

作为一个例子,我向您展示如何切换选择的粗体样式

private void boldToolStripButton_Click(object sender, EventArgs e)
{
    ToggleFontStyle(FontStyle.Bold);
    boldToolStripButton.Checked = !boldToolStripButton.Checked;
}

private void ToggleFontStyle(FontStyle style)
{
    int selStart = richTextBox.SelectionStart;
    int selLength = richTextBox.SelectionLength;
    int selEnd = selStart + selLength;

    if (selLength == 0) {
        return;
    }

    Font selFont = richTextBox.SelectionFont;
    if (selFont == null) {
        richTextBox.Select(selStart, 1);
        selFont = richTextBox.SelectionFont;
        if (selFont == null) {
            return;
        }
    }
    bool set = (selFont.Style & style) == FontStyle.Regular;

    for (int from = selStart, len = 1; from < selEnd; from += len) {
        richTextBox.Select(from, 1);
        Font refFont = richTextBox.SelectionFont;
        for (int i = from + 1; i < selEnd; i++, len++) {
            richTextBox.Select(i, 1);
            if (!refFont.Equals(richTextBox.SelectionFont))
                break;
        }
        richTextBox.Select(from, len);
        if (set) {
            richTextBox.SelectionFont = new Font(refFont, refFont.Style | style);
        } else {
            richTextBox.SelectionFont = new Font(refFont, refFont.Style & ~style);
        }
    }
    // Restore the original selection
    richTextBox.Select(selStart, selLength);
}

如您所见,这非常复杂,因为当前的文本选择可以包含格式不同的文本部分。此代码以分段方式更改字体样式,确保一块具有唯一的格式。

为了提供用户友好的界面,您还必须处理文本选择事件并根据选择的格式切换样式按钮。即,如果用户选择粗体文本,则粗体切换按钮应处于按下状态。

于 2012-06-10T14:44:19.650 回答
0

要更改按钮单击或类似
richTextBox1.Text += " ";
richTextBox1.Select(richTextBox1.TextLength,1);
FontDialog fd = new FontDialog();
fd.ShowDialog();
richTextBox1.SelectionFont = fd.Font;

的字体,如果您希望字体固定在单击上,则对其进行硬编码,而不是显示字体对话框。
*我不明白你的意思how can I remove RichTextBox icons and toolbars*

于 2012-06-10T15:48:58.730 回答