2010-11-29 14 views
2

나는 현재 이미지를 ASCII 아트로 변환하는 Paint.net 용 플러그인을 만들고 있습니다. 나는 잘 작동 변환이 있고, 고정 너비 글꼴로 TextBox 컨트롤로 ASCII 아트를 출력합니다. 내 문제는 TextBox의 줄 간격 때문에 ASCII 아트가 세로로 늘어져 있다는 것입니다. TextBox의 줄 간격을 설정할 수있는 방법이 있습니까?C# TextBox 줄 간격

+1

아마도하여 RichTextBox를 사용하여 행 높이 설정 : http://social.msdn.microsoft.com/forums/en-US/vblanguage/thread/8781caf6-5759-4fee-8c08-cd8a2d85fc9f를? –

답변

3

TextBox는 서식 옵션이없는 단일 또는 다중 행 텍스트를 단순히 표시합니다. 글꼴은 가질 수 있지만 텍스트가 아니라 TextBox에만 적용되므로 줄 간격과 같은 단락 설정은 내가 아는 한 가질 수 없습니다 .

첫 번째 제안은 RichTextBox를 사용하는 것이지만 다시 RTF에는 행 간격 코드가 없으므로 불가능할 수도 있습니다.

그래서 마지막으로 소유자가 만든 컨트롤을 사용하는 것이 좋습니다. 너비가 고정 너비 글꼴로 너무 어려워서는 안됩니다. 각 문자의 위치는 (x*w, y*h)입니다. 여기서 xy은 문자 색인이고 wh은 한 문자의 크기입니다.

편집 : 조금 더 생각하면 더 간단합니다. 단순히 문자열을 줄로 구분하고 각 줄을 그립니다.


다음은 간단한 제어입니다. 테스트했을 때 의 경우 Spacing의 가장 좋은 값은 입니다.

/// <summary> 
/// Displays text allowing you to control the line spacing 
/// </summary> 
public class SpacedLabel : Control { 
    private string[] parts; 

    protected override void OnPaint(PaintEventArgs e) { 
     Graphics g = e.Graphics; 
     g.Clear(BackColor); 

     float lineHeight = g.MeasureString("X", Font).Height; 

     lineHeight += Spacing; 

     using (Brush brush = new SolidBrush(ForeColor)) { 
      for (int i = 0; i < parts.Length; i++) { 
       g.DrawString(parts[i], Font, brush, 0, i * lineHeight); 
      } 
     } 
    } 

    public override string Text { 
     get { 
      return base.Text; 
     } 
     set { 
      base.Text = value; 
      parts = (value ?? "").Replace("\r", "").Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); 
     } 
    } 

    /// <summary> 
    /// Controls the change in spacing between lines. 
    /// </summary> 
    public float Spacing { get; set; } 
}