如何拆分两列中的按钮文本

时间:2016-03-10 06:55:24

标签: c# winforms

我有一个按钮,我想自动分隔文本和数字。 恩。 Text = Programming,Numbers = 1354.25 然后结果可以适合按钮宽度。文本将位于最左侧,数字将位于最右侧。

Result="Programming          1354.25".
Result="Program                54.25".
Result="C#                 514754.25".

我不想添加空格,因为文字和文字中的字符数量数字各不相同。

3 个答案:

答案 0 :(得分:4)

如果您提到的结果是期望的结果,您可以计算制作恒定长度的字符串所需的空格数,即(假定TextNumbers都是{{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项。而且您的按钮的名称为button1button2等。

您需要做的第一步是找到应在按钮上绘制的文本的最大宽度。没有空格,只有数据。您应该使用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}";
}

结果:

enter image description here

请注意,如果每个按钮上都有不同的字体,那也没问题。在计算最大宽度时,您需要使用每个按钮的字体,而不是使用第一个按钮的字体。

答案 2 :(得分:0)

var result = "Programming          1354.25";

var pieces = result.Split(' ');
Debug.Write(pieces[pieces.Length - 1]);

此代码基本上将结果拆分为字符串数组,然后输出该数组中的最后一个索引。