2012-08-23 4 views
1

세부보기 모드의 ListView가 있는데 항목 텍스트의 일부를 굵게 표시하고 싶습니다 (항목 텍스트의 일부 하위 문자열을 찾는 위치를 강조 표시하기 위해).ListViewItem 텍스트의 일부를 굵게 만드는 방법은 무엇입니까?

그래서 이런 식으로 뭔가 :

Somefilename/boldText/등

그렇게 할 수있는 방법이 있습니까?

+2

WPF 또는 WinForms? –

+1

@KlausByskovHoffmann이 묻는 것처럼 Windows 또는 웹입니까? – MaxDataSol

+0

죄송합니다 ... 그 WinForm 앱을 잊어 버렸습니다 – bakua

답변

3

좋습니다. 에 ListView을 먼저 입력해야합니다.이 속성을 true으로 설정하면됩니다. 이제 당신은 당신이 DrawColumnHeader를 구현하고 거기에이 줄을 배치해야 거라고했던 것을 : 어떤 지역에 따라 하나 DrawItem 또는 DrawSubItem에,

e.DrawDefault = true; 

다음 다음과 같은 코드를 구현해야합니다을 문자열을 파싱하지 않아서 코드를 완벽하게 작성하지 못했다는 점을 염두에 두십시오. 그리고 직접 텍스트를 그리기 때문에 선택한 항목을 그리기 구현해야합니다.

var boldFont = new Font(this.Font, FontStyle.Bold); 
var location = new PointF(e.Bounds.Location.X, e.Bounds.Location.Y); 

e.Graphics.DrawString("Somefilename/", this.Font, Brushes.Black, location); 
var size = e.Graphics.MeasureString("Somefilename/", this.Font); 

location.X += size.Width; 
e.Graphics.DrawString("boldText", boldFont, Brushes.Black, location); 
size = e.Graphics.MeasureString("boldText", boldFont); 

location.X += size.Width; 
e.Graphics.DrawString("/etc", this.Font, Brushes.Black, location); 

주목해야 할 또 다른 점은 어떤 글꼴이 마진이 굵은 글꼴이 더 많은 공간을 차지하기 때문에 당신이 오프셋 조금 플레이해야한다는 것입니다.

Item 다음 바로 DrawSubItem 이벤트에 대한 e.DrawDefault = true; 구현 SubItem없는 경우 - 항목이 SubItem 다음 DrawItem 동안 그 라인을 구현하는 경우와 VICA 반대를.

+0

감사합니다 :) 이것은 내가 찾고있는 것입니다. 하지만 여전히 문제가 하나 있습니다. 내가 글자를 그릴 때 글자 줄의 의미가 이상하게 보입니다. 녹색 윤곽선이 그려져 있습니다.내가 무엇을 의미하는지 알면 흐리게 보인다. – bakua

+0

'Brushes.Black' 대신에'SystemBrushes.WindowText'를 사용해 볼 수있다. 그러나 그것은 내가 경험하고 있지 않았기 때문에 어둠 속에서 한 발 맞았습니다. –

+0

그것은 도움이되지 않았다. (여기는 화면이 틀렸다. (이 텍스트는 분명히 잘못 작성되었지만,이 항목을 선택하자마자 바로 그 이후 모든 것이 괜찮다.) http://img607.imageshack.us/img607 /7375/screenuoa.png – bakua

2

OnPaint를 재정의해야합니다. 목록보기는 .NET 프레임 워크에 의해 그려진되지 않고에만 지원됩니다,

Make portion of a Label's Text to be styled bold

Custom ListView in Winforms?

을하지만 이러한 링크를 시도하십시오. 따라서 OnPaint를 재정의하더라도 호출되지 않을 수 있습니다. 따라서 목록보기 컨트롤을 재정의해야 할 수도 있습니다.

+2

OnPaint가 도움이되지 않습니다. 이런 일을하기 위해서는 ListView로 많은 작업을해야 할 것입니다. 예를 들어 ObjectListView를보십시오. – Grammarian

+0

맞습니다. OP에서 원하는 텍스트를 그리는 방법을 ** 매우 ** 부분적으로 구현했습니다.하지만 더 많은 작업이 필요합니다. @ 그래미언, 내 게시물에 더 추가 할 수 있으면 언제든지. –

+0

사실, 각 항목에 대해 .UseItemStyleForSubItems = false를 설정해야합니다. 이것은 내 생각에 가장 적합한 대답입니다. – Larry

관련 문제