如何使用winforms在c#中获取richtextbox中某一行的字体大小
how to get the fontsize of a certain line in a richtextbox in c# using winforms
我有 2 个用于字体和字体大小的组合框。当我单击它们时,它会更改我的 richtextbox 中的字体大小或字体。现在我希望它像在 word 中一样工作。如果您刚移动到的行的字体或大小不同。它应该检测到并更改组合框以匹配当前行的字体和大小。 Somoeone 其他人问了同样的问题并得到了对我不起作用的结果。如下
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
MessageBox.Show("we got here"); // this is my added part to let me know if the code is even getting executed. It is not.
richTextBox1.SelectionStart = 1;
richTextBox1.SelectionLength = 1;
comboBox1.Text = richTextBox1.SelectionFont.ToString();
comboBox2.Text = null;
comboBox2.Text = richTextBox1.SelectionFont.Size.ToString();
}
我希望这是我的答案,但我看不出 SelectionFont 在什么都没有选择的情况下会有什么不同。此外,当我使用 up/down 箭头浏览文档时,似乎没有调用 richTextBox1_SelectionChanged 事件。问题不在于组合框,问题在于当我浏览我的文档时,我需要能够知道它在插入符号位置的字体和大小,以便它可以触发一个事件来更改组合框以匹配。
您使用的代码将始终从索引 1
处的字符中进行选择,并且长度为 1
。相反,您需要使用 which 将在不指定选择的情况下为您提供以下代码(因此它将从 ritchTextBox 中进行选择)。
string fontName = richTextBox1.SelectionFont.Name;
float fontsize = richTextBox1.SelectionFont.Size;
您应该将新的 comboBox 位置的值临时保存在变量中,否则如果您直接这样做
comboBox1.SelectedIndex = comboBox1.FindStringExact(richTextBox1.SelectionFont.Name);
comboBox1_SelectedIndexChanged 事件将立即调用并可能影响结果。
所以试试看:
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
int comboBox1Index = comboBox1.FindStringExact(richTextBox1.SelectionFont.Name);
int comboBox2Index = comboBox2.FindStringExact(richTextBox1.SelectionFont.Size.ToString());
comboBox1.SelectedIndex = comboBox1Index;
comboBox2.SelectedIndex = comboBox2Index;
}
我采用了 Sujith 的解决方案和 Markus 的一半解决方案,得出了以下对我来说效果很好的方案:
Private Sub Description_SelectionChanged(sender As Object, e As EventArgs) Handles Description.SelectionChanged
Dim fontName As String = Description.SelectionFont.Name
Dim fontSize As Single = Description.SelectionFont.Size
tbSelectFont.Text = fontName
tbSelectSize.Text = fontSize
End Sub
我有 2 个用于字体和字体大小的组合框。当我单击它们时,它会更改我的 richtextbox 中的字体大小或字体。现在我希望它像在 word 中一样工作。如果您刚移动到的行的字体或大小不同。它应该检测到并更改组合框以匹配当前行的字体和大小。 Somoeone 其他人问了同样的问题并得到了对我不起作用的结果。如下
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
MessageBox.Show("we got here"); // this is my added part to let me know if the code is even getting executed. It is not.
richTextBox1.SelectionStart = 1;
richTextBox1.SelectionLength = 1;
comboBox1.Text = richTextBox1.SelectionFont.ToString();
comboBox2.Text = null;
comboBox2.Text = richTextBox1.SelectionFont.Size.ToString();
}
我希望这是我的答案,但我看不出 SelectionFont 在什么都没有选择的情况下会有什么不同。此外,当我使用 up/down 箭头浏览文档时,似乎没有调用 richTextBox1_SelectionChanged 事件。问题不在于组合框,问题在于当我浏览我的文档时,我需要能够知道它在插入符号位置的字体和大小,以便它可以触发一个事件来更改组合框以匹配。
您使用的代码将始终从索引 1
处的字符中进行选择,并且长度为 1
。相反,您需要使用 which 将在不指定选择的情况下为您提供以下代码(因此它将从 ritchTextBox 中进行选择)。
string fontName = richTextBox1.SelectionFont.Name;
float fontsize = richTextBox1.SelectionFont.Size;
您应该将新的 comboBox 位置的值临时保存在变量中,否则如果您直接这样做
comboBox1.SelectedIndex = comboBox1.FindStringExact(richTextBox1.SelectionFont.Name);
comboBox1_SelectedIndexChanged 事件将立即调用并可能影响结果。
所以试试看:
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
int comboBox1Index = comboBox1.FindStringExact(richTextBox1.SelectionFont.Name);
int comboBox2Index = comboBox2.FindStringExact(richTextBox1.SelectionFont.Size.ToString());
comboBox1.SelectedIndex = comboBox1Index;
comboBox2.SelectedIndex = comboBox2Index;
}
我采用了 Sujith 的解决方案和 Markus 的一半解决方案,得出了以下对我来说效果很好的方案:
Private Sub Description_SelectionChanged(sender As Object, e As EventArgs) Handles Description.SelectionChanged
Dim fontName As String = Description.SelectionFont.Name
Dim fontSize As Single = Description.SelectionFont.Size
tbSelectFont.Text = fontName
tbSelectSize.Text = fontSize
End Sub