2013-02-08 3 views
0

listbox 및 일부 richtextboxex이 포함 된 창 형식입니다. listbox에는 몇 가지 값이 있습니다. listbox에서 값을 선택하면 richtextboxex이 선택한 값에 따라 데이터로 바인딩됩니다.richtextbox의 특정 텍스트 강조 표시

나는 목록 상자에서 값을 선택하면 richtextbox에 결합되는 텍스트, 예를 들어 강조하고 있습니다로,

당신이 < < OverdueInvCount >> 연체 송장 (들)가 그냥 친절한 알림 연체 잔액이 < < OverdueInvTotal >>입니다. 귀하가 빚지고있는 금액에 관해 질문이 있으시면 전화로 문의 해 주시면 기꺼이 토론하겠습니다. 이미 송금 한 경우이 알림을 무시하십시오.

모든 데이터가 데이터베이스에서 제공됩니다.

<<OverdueInvCount>><<OverdueInvTotal>>을 강조 표시하고 싶습니다. 이 같은

+0

"목록 상자"정의 - 여러 가지 상황에서 이러한 일이 발생하고 태그가 단서를 제공하지 않습니다. Winforms, ASP.NET 또는 다른 뭔가? –

답변

0

뭔가 (잘 작동하는 .. 그냥 테스트 것 같다) 작동합니다 : 그렇게하는

int openBrace = richTextBox.Text.IndexOf("<"); 
while (openBrace > -1) { 
    int endBrace = richTextBox.Text.IndexOf(">", openBrace); 
    if (endBrace > -1) { 
     richTextBox.SelectionStart = openBrace; 
     richTextBox.SelectionLength = endBrace - openBrace; 
     richTextBox.SelectionColor = Color.Blue; 
    } 
    openBrace = richTextBox.Text.IndexOf("<", openBrace + 1); 
} 
0

한 가지 방법은 당신이 원하는 기능을 새로운 객체로 캐스팅없이 것은 무시하는 것입니다 ListBoxDrawItem

void listBox1_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    var item = listBox1.Items[e.Index] as <Your_Item>; 

    e.DrawBackground(); 
    if (item.fIsTemplate) 
    { 
     e.Graphics.DrawString(item.Text + "(Default)", new Font("Microsoft Sans Serif", 8, FontStyle.Regular), Brushes.Black, e.Bounds); 
    } 
    else 
    { 
     e.Graphics.DrawString(item.Text, new Font("Microsoft Sans Serif", 8, FontStyle.Regular), Brushes.Black, e.Bounds); 
    } 
    e.DrawFocusRectangle(); 
} 

listBox1.DrawMode = DrawMode.OwnerDrawFixed; 
listBox1.DrawItem += new DrawItemEventHandler(listBox1_DrawItem); 
( InitializeComponent(); 호출 후) 생성자이 추가
+0

글꼴을 하드 코딩하지 않으려면 일부 시스템 변수를 사용해야합니까? 반면 Format 이벤트 (http://msdn.microsoft.com/en-us/library/system.windows.forms.listcontrol.format.aspx)가 더 쉬울 수도 있습니다. 자신을 그리기. –