如何在c#中使用winforms获取richtextbox中某一行的字体大小

本文关键字:一行 字体 richtextbox 获取 winforms | 更新日期: 2023-09-27 18:02:37

我有两个组合框用于字体和字体大小。当我点击它们时,它会改变字体大小或richtextbox中的字体。现在我想让它像文字一样工作。如果您刚刚移动到的行是不同的字体或大小。它应该检测到这一点,并更改comboxes以匹配当前行的字体和大小。有人问了同样的问题,得到的结果对我来说并不适用。内容如下

    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会有什么不同,当没有选择。此外,richTextBox1_SelectionChanged事件似乎没有被调用,当我通过文档移动向上/向下箭头。问题不在于组合框,问题在于,当我在文档中进行箭头操作时,我需要能够知道插入符号位置的字体和大小,以便它可以触发一个事件来更改组合框以匹配

如何在c#中使用winforms获取richtextbox中某一行的字体大小

您所使用的代码将始终从索引1处的字符进行选择,并且长度为1。相反,您需要使用which来为您提供以下代码,而不指定选择(因此它将从ritchTextBox中获取选择)。

string fontName = richTextBox1.SelectionFont.Name;
float fontsize = richTextBox1.SelectionFont.Size;

您应该将新组合框位置的值临时保存在变量中,否则,如果您直接执行

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