1

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

现在的温度——

第二个标签:

46c

但如果有时只是为了温度是否会升高到 100 的问题,那么它应该是:

现在温度 - 100℃

但随后 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();
                        }
                    }
                }

            }     
        }
4

1 回答 1

0

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

所以沿着线的东西:

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...";

然后在你的刻度处理程序的内部循环中:

....

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

....      

不过,这仅在不需要正确对齐温度值的情况下才有效。

于 2012-08-01T13:06:42.360 回答