如何使标签中的值根据值大小自动更改其位置?

时间:2012-08-01 11:34:03

标签: c#

我有两个标签,例如第一个是:

温度现在是 -

第二个标签:

46c中

但是,如果有时候只是问题,温度是否会达到100,那么它应该是:

温度现在是 - 100c

然后100的c将超过另一个标签的“ - ”。所以,如果它的两个数字是好的,但如果它的三个数字超过另一个标签。

有没有办法计算或更新自动带有数字的标签,这样它会根据当前的数字位数和其他标签位置改变其位置,这样它们就不会得到另一个?

构造函数中的代码。

temperature_label = new Label();
    textMode_label = new Label();
    this.Controls.Add(textMode_label);
    this.Controls.Add(temperature_label);

    temperature_label.Location = new Point(260, 200);
    temperature_label.Height = 250;
    temperature_label.Width = 500;
    temperature_label.ForeColor = Color.Red;
    temperature_label.Font = new Font("Arial", 35, FontStyle.Bold);
    temperature_label.Text = "200c";

    textMode_label.Location = new Point(350, 200);
    textMode_label.Height = 250;
    textMode_label.Width = 500;
    textMode_label.ForeColor = Color.Blue;
    textMode_label.Font = new Font("Arial", 35, FontStyle.Bold);
    textMode_label.Text = "The Temperature Now Is - ";

然后在计时器滴答事件中,我用值:

更新temperature_label
private void timer_Tick(object sender, EventArgs e)
        {
            Computer computer = new Computer();
            computer.Open();
            computer.GPUEnabled = true;

            foreach (var hardwareItem in computer.Hardware)
            {

                if (hardwareItem.HardwareType == HardwareType.GpuNvidia)
                {
                    foreach (var sensor in hardwareItem.Sensors)
                    {
                        if (sensor.SensorType == SensorType.Temperature)
                        {
                            sensor.Hardware.Update();

                            temperature_label.Text = sensor.Value.ToString()+ "c";
                            timer.Interval = 1000;
                            if (sensor.Value > 90)
                            {
                                Logger.Write("The current temperature is ===> " + sensor.Value);
                                button1.Enabled = true;
                            }
                            this.Select();
                        }
                    }
                }

            }     
        }

1 个答案:

答案 0 :(得分:0)

您可以使用单个标签而不是两个标签,并在文本上执行string.Format。 使用标签的Tag属性来保存要格式化的文本,并在格式化后将其指定为标签文本。

这就是:

temperature_label = new Label();
this.Controls.Add(temperature_label);

temperature_label.Location = new Point(260, 200);
...
temperature_label.Tag = The Temperature Now Is - {0}C;
temperature_label.Text = "Fetching temperature...";

然后在你的tick-handler的内部循环中:

....

temperature_label.Text = string.Format(temperature_label.Tag, sensor.Value);

....      

这只适用于无需正确对齐温度值的情况。