2010-06-16 4 views
0

Winforms 드롭 다운이 있습니다. 드롭 다운은 다음과 같은 형식의 문자열을 표시합니다.드롭 다운 목록의 텍스트 맞춤

문자열이 항상 정렬되어야하므로 무게가 항상 같은 지점에서 시작됩니다. 그래서 그것들의 목록이 있으면 모든 것이 훌륭하게 정렬됩니다.

현재 나의 해결책은 고정 폭 글꼴을 사용하고 각 부분을 공백으로 채워 모든 내용을 정렬하는 표시 문자열을 만드는 것입니다. 그러나 글꼴은 응용 프로그램의 나머지 부분과 다르게 보이고 베타 테스터는 승인하지 않았습니다. 모노 간격 글꼴을 사용하지 않고 텍스트를 정렬 할 수있는 방법이 있습니까? 이 방법으로 나머지 응용 프로그램에 사용되는 동일한 글꼴을 사용할 수 있습니다.

감사합니다.

+0

DataGridview 콤보 열의 DrawItem 이벤트를 얻는 방법에 대한 정보는 http://stackoverflow.com/questions/1774171/icons-in-a-datagridviewcomboboxcolumn – Tony

답변

1

ComboBox의 DrawItem 이벤트를 살펴보십시오. 여기서 모든 형식을 지정할 수 있습니다. DrawMode를 OwnerDrawXXXX로 설정했는지 확인하십시오.

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e) 
     { 
      ComboBox cb = (ComboBox)sender; 
      int index = e.Index; 
      Graphics g = e.Graphics; 

      DataItem item = (DataItem)cb.Items[index]; 

      g.DrawString(item.Name, new Font("Arial", 8), new SolidBrush(Color.Blue), 0, e.Bounds.Y); 
      g.DrawString(item.Age.ToString(), new Font("Arial", 8), new SolidBrush(Color.Blue), 100, e.Bounds.Y); 
     } 

     public class DataItem 
     { 
      public string Name; 
      public int Age; 

      public override string ToString() 
      { 
       return string.Format("{0} {1}", Name, Age); 
      } 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      comboBox1.Items.Add(new DataItem { Name = "Apple", Age = 10 }); 
      comboBox1.Items.Add(new DataItem { Name = "Berry", Age = 20 }); 
      comboBox1.Items.Add(new DataItem { Name = "Cherry", Age = 30 }); 
     } 
+0

에서 e.DrawBackground()가 필요합니다. 및 e.DrawFocusRectangle()하지만 그렇지 않으면 좋은 예입니다. 감사. – Tony

+0

당신이 처음이기 때문에 오직 한스 이상으로 답을 얻습니다. 두 답이 모두 정확합니다. – Tony

1

이것은 매우 webby 종류의 질문입니다. 저는 ComboBox에 대해 이야기하고 있다고 가정합니다. 예, DrawMode 속성으로 수행 할 수있는 작업이 있습니다. OwnerDrawFixed로 설정하면 DrawItem 이벤트 핸들러를 구현하고 원하는 방식대로 드롭 다운 항목을 그릴 수 있습니다. 이 이벤트에 대한 MSDN Library 항목에는 아주 좋은 예가 있습니다.

콤보 상자의 텍스트 상자 부분에 올바르게 표시하려면 추가 작업이 필요합니다. 문제가되지 않아야합니다. 그럴 필요가 없습니다. 아마도 고유 한 문자로 항목을 분리 할 수 ​​있습니다. 하나는 DrawItem 이벤트에서 열 텍스트를 다시 찾을 수있는 문자입니다.

+0

http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.drawitem.aspx는 MSDN 링크입니다. – Tony

관련 문제