2009-05-31 2 views
3

작은 바보 같은 문제가있어서 여러분이 여러분의 경험에 참여할 수 있기를 바랍니다.텍스트 상자에 텍스트를 깔끔하게 정렬하고 .txt로 내보낼 때 텍스트를 유지하는 방법

TEXT  
TEXT 
TEXT 
TEXT 

_______________________ 
Name:   Amount: 
Blah     3 
Blahblah    10 
_______________________ 

그러나 상자 안에 텍스트가 문제입니다 :

은 내가 다음 (동적) 데이터 텍스트 상자가 필요합니다. 지금까지 이라는 StringBuilder으로이 텍스트를 모두 만들고 있는데 결국에는 MyTextBox.Text = SB.ToString();

SB.AppendLine("Name\t\Amount:"); 

내가 이런 루프 내부의 데이터를 생성 :

SB.AppendLine(name + "\t\t" + amount); 

하지만 내 예처럼 깔끔하게 정렬되지 않습니다

나는 다음과 같은 상자 안에 헤더를 설정! 이름이 이전 이름보다 긴 경우, 금액은 이전과 비교하여 줄의 다른 위치에 나타납니다.

xx. 이 같은 :

TEXT 
TEXT 
TEXT 
TEXT 

__________________ 
Navn  Antal: 
SpecSaver   1 
MadEyes  1 
Gucci  1 
__________________ 

내 첫 번째 문제 :가 어떻게이 문제를 방지 할 수 있습니까? 많은 데이터를 포함하는 여러 줄짜리 텍스트 상자가 필요할 때 보통 무엇을합니까? 내 두 번째 문제 :이 같은 .txt 인 문서로 내보낼 때 :

using(var text = new StreamWriter("textfile.txt", false)) 
{ 
    text.Write(SB); 
} 

그것은 아직 완전히 잘못 정렬 된 데이터의 또 다른 버전을 제공합니다. MyTextBox.Text와 동일해야합니다.

답변

3

먼저 텍스트 상자에 Fixed-Width 글꼴을 선택해야합니다.

다음으로, 당신이 제공 할 수있는 Padding amount

 StringBuilder sb = new StringBuilder(); 
     sb.AppendLine(string.Format("{0, -20}{1, -10}", "Title 1", "Title 2")); 
     sb.AppendLine(string.Format("{0, -20}{1, -10}", "Val Col 1 A", "Val Col 2 A")); 
     sb.AppendLine(string.Format("{0, -20}{1, -10}", "Val Col 1 B", "Val Col 2 B")); 

     Console.WriteLine(sb.ToString()); 

결과에서 (또는 StringBuilder.AppendFormat에) string.Format()에 :

Title 1    Title 2 
Val Col 1 A   Val Col 2 A 
Val Col 1 B   Val Col 2 B 
+0

나는 당신이 "제공 할 수있다"는 것을 의미한다고 생각합니다. –

1

첫 번째 질문에 (불완전하게) 대답하십시오. 각 문자열에 대해 같은 수의 탭을 사용하는 대신 추가 문자가 하나, 둘 또는 그 이상의 "탭"가치가있을 수 있으므로 문자열의 문자 수를 계산해야합니다. 예를 들어, 다음과 같은 두 개의 문자열을 고려

"Hi" 
"Hello there" 

두 번째는 여전히 이상이 될 것입니다 이러한 각각의 탭 같은 번호를 추가 한 경우, 4 개 공간의 탭을 가정.

탭을 추가하기 전에이 작업을 수동으로 수행 할 수 있습니다. 탭을 추가하여 원하는 길이만큼 탭을 추가하거나 format 문을 사용할 수 있습니다 (Eoin의 답변 참조).

(아마도) 두 번째 질문에 답하십시오. 초기 텍스트의 길이를 계산하면 탭이 아닌 필요한 수의 공백을 추가 한 다음 비례 폰트가 있다고 가정하면 숫자가 항상 정렬됩니다.

+0

이는 내가 거라고 후 게시 된 것을 실현 {0} 형식 식별자 –

+0

와 패딩의 양을 지정하여, 및 String.format 또는 stringbuilder.appendformat 한 단계 수행하지만 지적하고 싶었 수 있습니다 OP가 생각할 필요가있는 단계. – ChrisF

1

고정 된 피치 글꼴로 문자 정렬을 수행합니다. 텍스트 상자와 인쇄의 글꼴로 courier-new을 선택하십시오.

string-padding-problem (MessageBox가 가변 피치 글꼴을 표시하고 있을지도 모름)을 참조하십시오.

0

당신은 또한 .padleft .padright (INT) 방법을 lookinto 수있는 왼쪽 또는 오른쪽에 공백을 추가하여 물건 정렬을 유지하십시오.

는 또한 Curior이 guly하지만 다른 글꼴에 나는 W보다 적은 공간을 차지 할 경우 각 헌장 내가 그런 물건 동일한 공간 WM을 차지 지도록 만든 글꼴을 lookinto 수

0

하는 경우 그것은 간격 문제를 일으키는 숫자 일 뿐이며, figure spaces은 올바르게 맞출 수 있습니다.

int bigNumber = 1234; 
int smallNumber = 5; 

string bigNumberString = bigNumber.ToString(); 
string smallNumberString = smallNumber.ToString(); 

// This works only in a TextBox with a monospaced font. 
textBox1.Text = string.Format("{0,4}\n{1,4}", 
    bigNumberString, 
    smallNumberString); 

// This works in TextBoxes with any font. 
textBox1.Text = string.Format("{0}\n{1}", 
    bigNumberString, 
    smallNumberString.PadLeft(bigNumberString.Length, '\u2007'));