我想垂直编组冒号,但根据字符大小,它们之间存在差距。
我对所有行使用stringExpression1.PadRight(11)
。
是否有内置方法或我需要measure
字符宽度才能更好地查看?
注意:它们必须是字符串我不能使用可视组件,例如TextBlock
答案 0 :(得分:0)
您可以使用Tab
“\ t”。如果像Systolic,Diastolic等左侧描述是常数,那么您可以添加适当数量的"\t"
以提供正确的间距,如下所示。
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine(String.Format("{0}\t\t: {1}", "Systolic", 80));
stringBuilder.AppendLine(String.Format("{0}\t\t: {1}", "Diastolic", 170));
stringBuilder.AppendLine(String.Format("{0}\t\t: {1}", "Pulse", 50));
stringBuilder.AppendLine(String.Format("{0}\t: {1}", "LooooooongDesc", 50));
this.tb.Text = stringBuilder.ToString();
来自Sheridan的编辑>>>
要使其在WPF
中有效,您需要将TextBox
的{{3}}设置为True
:
<TextBox AcceptsTab="True" ... />
答案 1 :(得分:0)
它没有真正帮助,但希望为s.one
显示出一种方式用法
List<string> items = new List<string>() {
UIResources.Systolic,
UIResources.Diastolic,
UIResources.Pulse };
var result = GetAlined(items);
帮助代码
const string EMPTYLINE=" ";
public static int GetDefaultItemWidth(string text,System.Drawing.Font font=null)
{
if (font == null)
font = System.Drawing.SystemFonts.DefaultFont;
return System.Windows.Forms.TextRenderer.MeasureText(text, font).Width;
}
public static List<string> GetAlined(List<string> inputString)
{
double max = default(double);
var spaceWidth = GetDefaultItemWidth(" ");
foreach (var item in inputString)
{
var width = GetDefaultItemWidth(item);
max = Math.Max(max, width);
}
List<string> resultItems = new List<string>(inputString.Count);
foreach (var item in inputString)
{
var width = GetDefaultItemWidth(item);
if ((max - width) > spaceWidth)
{
var spaceCount = (int)Math.Round((max - width) / spaceWidth);
string resultItem = item;
resultItem=EMPTYLINE.Take(spaceCount).ToString() + resultItem;
resultItems.Add(resultItem);
}
else
{
resultItems.Add(item);
}
}
return resultItems;
}