我正在使用 VS2010、C# 开发 WinForm 应用程序,有没有办法在文本框中使用两种字体?例如,我的用户使用 Tahoma 字体键入,然后他可以按组合键或单击按钮,然后他可以使用 Times New Roman 字体键入(使用 Tahoma 键入的文本不应更改其字体)
我有什么选择?我想 RichTextBox 是我唯一的选择,对吗?如果是这样,如何删除 RichTextBox 图标和工具栏?
Telerik 或其他第三方组件呢?
正如你所说,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);
}
如您所见,这非常复杂,因为当前的文本选择可以包含格式不同的文本部分。此代码以分段方式更改字体样式,确保一块具有唯一的格式。
为了提供用户友好的界面,您还必须处理文本选择事件并根据选择的格式切换样式按钮。即,如果用户选择粗体文本,则粗体切换按钮应处于按下状态。
要更改按钮单击或类似
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
*