2012-04-27 4 views
4

Windows Forms 프로젝트가 있습니다. 양식에 txt라는 텍스트 상자가 있습니다. 작업은 사용자의 문자열을 두 개의 열에있는 textBox 구문 분석 텍스트에 작성하는 것입니다. 각 열에는 왼쪽 정렬이 있어야합니다. 다음은 예입니다 :Windows Forms TextBox 버그?

-------------------------- 
Parameters   Values 

height    36 
width    72 
length of trousers 32 
-------------------------- 

각 값은 다른 아래 하나 서있다. 분명히 우리는 각 매개 변수 다음에 필요한 수의 공백을 입력하는 메서드가 필요합니다.

: 나는 예상치 못한 사진이

string report = Environment.NewLine + "-------------" + DateTime.Now + 
       "-------------" + Environment.NewLine + 
       "Вихідні дані:" + Environment.NewLine + 
       "a:" + 
        AddSpaces("a:") + 
        "1" + 
        Environment.NewLine + 
       "ab:" + 
        AddSpaces("ab:") + 
        "1" + 
        Environment.NewLine + 
       "abcdefg:"+ 
        AddSpaces("abcdefg:") + 
        "1" + 
        Environment.NewLine; 

그리고

txt.Text += report; 

을 한 후 : 나는 다음과 같은 문자열을 사용하여이 방법을 테스트 한

private string AddSpaces(string str) 
{ 
    const int MAX_WIDTH = 50; 
    // We've got a 50 symbols field to fill it with current parameter 
    // name and add necessary number of spaces. 

    StringBuilder strWithSpaces = new StringBuilder(); 
    int numOfSpaces = MAX_WIDTH - str.Length; 
     for (int i = 0; i < numOfSpaces; i++) 
     { 
      strWithSpaces.Append(" "); 
     } 
     return strWithSpaces.ToString(); 
} 

:이 방법을 개발했습니다 TextBox Output

그 후 테스트 문자열을 파일로 작성하려고했습니다. 여기서 결과는 다음과 같습니다 파일

File Output

OUPUT가 올바른지. 텍스트 상자의 출력이 잘못되었습니다. textBox에 문제가 있습니다. 이 문제를 해결하는 방법? 여기 내 테스트 프로젝트의 코드입니다 :

/* 
Correct output looks like this: 

a:   1 
ab:   1 
abcdefg: 1 
*/ 

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 
namespace spaces 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      string report = Environment.NewLine + "-------------" + DateTime.Now + 
       "-------------" + Environment.NewLine + 
       "Вихідні дані:" + Environment.NewLine + 
       "a:" + 
        AddSpaces("a:") + 
        "1" + 
        Environment.NewLine + 
       "ab:" + 
        AddSpaces("ab:") + 
        "1" + 
        Environment.NewLine + 
       "abcdefg:" + 
        AddSpaces("abcdefg:") + 
        "1" + 
        Environment.NewLine; 

      txt.Text += report; 
      using (StreamWriter outfile = 
       new StreamWriter(@"D:\test.txt")) 
      { 
       outfile.Write(report); 
      } 
     } 
     private string AddSpaces(string str) 
     { 
      const int MAX_WIDTH = 50; 

      StringBuilder strWithSpaces = new StringBuilder(); 
      int numOfSpaces = MAX_WIDTH - str.Length; 
      for (int i = 0; i < numOfSpaces; i++) 
      { 
       strWithSpaces.Append(" "); 
      } 
      return strWithSpaces.ToString(); 
     } 
    } 
} 

답변

9

시도가 Courier New처럼 고정 폭 글꼴로 TextBox 컨트롤의 글꼴을 변경.

TextBox에서 여전히 기본 글꼴 Microsoft Sans Serif을 사용하고있는 것처럼 보입니다.이 글꼴은 각 문자마다 다른 너비가 있습니다.

+0

대단히 감사합니다. 귀하의 설명이 많은 도움이되었습니다. –

4

고정 폭 글꼴을 사용하지 않으므로 공백과 문자의 너비가 다릅니다. 공백은 일반적으로 비례 글꼴이 매우 좁기 때문에 공백이 더 많은 경우 공백이 적은 메인보다 줄이 짧게 보입니다. 모노 스페이스 글꼴 (예 : Courier 또는 Consolas)로 변경하면 더 잘 보입니다.