2016-08-17 16 views
1

글꼴 및 글꼴 크기에 대해 두 개의 콤보 상자가 있습니다. 그것을 클릭하면 내 richtextbox에서 글꼴 크기 또는 글꼴이 변경됩니다. 이제는 말처럼 작동하도록하고 싶습니다. 방금 이동 한 줄이 다른 글꼴 또는 크기 인 경우 그것은 감지하고 현재 라인의 글꼴과 크기와 일치하도록 comboxes를 변경해야합니다. Somoeone은이 같은 질문을했고 나에게 효과가 없었던 결과를 얻었다. 다음과 같았습니다winforms를 사용하여 C#의 richtextbox에서 특정 줄의 글꼴 크기를 얻는 방법

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 이벤트가 호출되지 않는 것 같습니다. 문제는 콤보 상자와 관련이 없습니다. 문제는 제가 문서를 통해 화살표를 따라 글꼴과 크기가 캐럿 위치에 있는지 알 수 있어야합니다. 그러면 콤보 상자를 변경하여 이벤트를 실행할 수 있습니다.

답변

0

당신은 당신이 그것을 직접

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; 
} 
+0

문제는 선택 변경 이벤트가 호출되지 않습니다 것입니다. 내 문서의 어디에 있든 내가 사용한 마지막 글꼴이 여전히 표시됩니다. – Larryrl

+0

그러면 RichTextBox 및 이벤트 처리와 관련이 있습니다. 내 테스트 예제에서는 잘 작동합니다. http://s000.tinyupload.com/index.php?file_id=87205811287792650699 – MarkusEgle

+0

예제를 살펴보고 모든 이벤트를 내 이벤트로 복사했지만 여전히 내 솔루션에서 작동하지 않았습니다. comboBox1.SelectedIndex = 0; comboBox2.SelectedIndex = 0; SelectIndex가 0이 될 수 없다는 예외를 throw합니다. – Larryrl

1

사용중인 코드는 항상 문자 1에있는 문자를 선택하며 길이는 1입니다. 그 대신 선택을 지정하지 않고 다음 코드를 제공 할 필요가 있습니다 (따라서 ritchTextBox에서 선택을 취할 것입니다).

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