我有一个按钮,我想自动分隔文本和数字。 恩。 Text = Programming,Numbers = 1354.25 然后结果可以适合按钮宽度。文本将位于最左侧,数字将位于最右侧。
Result="Programming 1354.25".
Result="Program 54.25".
Result="C# 514754.25".
我不想添加空格,因为文字和文字中的字符数量数字各不相同。
答案 0 :(得分:4)
如果您提到的结果是期望的结果,您可以计算制作恒定长度的字符串所需的空格数,即(假定Text
和Numbers
都是{{1 }} S):
string
但是,如果您没有使用固定大小的字体,则这些字体将无法正确对齐。例如,int count = Math.Max(0, 28 - (Text.Length + Numbers.Length));
string result = Text + new string(' ', count) + Numbers;
字符比i
字符占用更少的水平空间。在这种情况下,您必须处理按钮的W
事件并分别绘制其中一个或两个文本。
答案 1 :(得分:2)
我假设你的按钮数据有words
个数组KeyValuePair
项。而且您的按钮的名称为button1
,button2
等。
您需要做的第一步是找到应在按钮上绘制的文本的最大宽度。没有空格,只有数据。您应该使用Graphics.MeasureString方法。您可以从Graphics
处理程序参数中获取OnPaint
实例。
之后,您可以计算应添加到其他按钮的空间量,以获得大致相同的绘制文本宽度。
protected override void OnPaint (PaintEventArgs e)
{
base.OnPaint(e);
var words = new Dictionary<string, decimal> {
{ "Programming", 1345.25M },
{ "Program", 54.25M },
{ "C#", 342325.25M }
}.ToArray();
var g = e.Graphics;
var font = button1.Font;
var maxWidth = words.Max(x => g.MeasureString($"{x.Key}{x.Value}", font).Width);
SetButtonText(g, maxWidth, button1, words[0]);
SetButtonText(g, maxWidth, button2, words[1]);
SetButtonText(g, maxWidth, button3, words[2]);
}
private void SetButtonText(Graphics g,
float maxWidth, Button button, KeyValuePair<string, decimal> data)
{
var minSpacesCount = 5;
var spaceWidth = g.MeasureString(" ", button.Font).Width;
var initialTextWidth = g.MeasureString($"{data.Key}{data.Value}", button.Font).Width;
var spacesToAdd = minSpacesCount + (int)((maxWidth - initialTextWidth) / spaceWidth);
button.Text = $"{data.Key}{new String(' ', spacesToAdd)}{data.Value}";
}
结果:
请注意,如果每个按钮上都有不同的字体,那也没问题。在计算最大宽度时,您需要使用每个按钮的字体,而不是使用第一个按钮的字体。
答案 2 :(得分:0)
var result = "Programming 1354.25";
var pieces = result.Split(' ');
Debug.Write(pieces[pieces.Length - 1]);
此代码基本上将结果拆分为字符串数组,然后输出该数组中的最后一个索引。