gpt4 book ai didi

c# - 如何在 NumericUpDown 旋转框中显示不同的单位?

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:47 27 4
gpt4 key购买 nike

我正在尝试创建一个控件,允许用户以他们选择的单位输入长度。为了简洁起见,我将下面的代码限制为厘米和英寸,但实际上它们可供选择的单位比这两个 (2) 更多。

我想我可以通过覆盖 UpdateEditText()ValidateEditText() 来影响旋转框的显示。这是我想出的:

public enum UnitSystem { Metric, Imperial };

public class UnitNumberUpDown : NumericUpDown
{
public UnitNumberUpDown() { }

private void IncrementAndRound(decimal conversion, int denominator)
{
this.Increment = conversion / denominator;
this.Maximum = conversion * Math.Round(MaximumPointSize * denominator / conversion) / denominator;
this.Value = conversion * Math.Round(this.Value * denominator / conversion) / denominator;
}

public decimal MaximumPointSize { get; set; }

private UnitSystem units;
public UnitSystem Units
{
get { return units; }
set { if (value != Units) {
units = value;
switch (Units)
{
case UnitSystem.Metric:
IncrementAndRound(POINTS_PER_CM, 80);
break;
case UnitSystem.Imperial:
IncrementAndRound(POINTS_PER_INCH, 64);
break;
}
}
}
}

private const decimal POINTS_PER_CM = 28.3464567m;
private const decimal POINTS_PER_INCH = 72m;

protected override void UpdateEditText()
{
switch (Units)
{
case UnitSystem.Metric:
this.Text = (this.Value / POINTS_PER_CM).ToString("0.00");
break;
case UnitSystem.Imperial:
this.Text = (this.Value / POINTS_PER_INCH).ToString("0.00");
break;
}
}

protected override void ValidateEditText()
{
try {
decimal value = decimal.Parse(this.Text.Trim());
switch (Units)
{
case UnitSystem.Metric:
this.Value = value * POINTS_PER_CM;
break;
case UnitSystem.Imperial:
this.Value = value * POINTS_PER_INCH;
break;
}
} catch {
base.ValidateEditText();
}
}
}

以上并不总是有效。有时,ValidateEditText() 的调用顺序与 Units 属性更改相关,而 switch 语句会导致错误转换。

我该如何修复代码实现或我的设计?

最佳答案

我会选择 NumericUpDown 中的数字, 而单位在 ComboBox在它的旁边。它对客户来说是最明显的。

带单位的 MS Word 上下数字与您的解决方案不同。在那里你有只有一个单元(比方说cm)。您可以输入任何单位的文本(例如,mm),但它会在内部转换为所述单位(cm)。 Text在您按下 UpDown 或关闭窗口之前不会更新(下次打开时,您将在 cm 中看到值)。

我认为您必须检查 TextChanged (不是 ValidateEditText ,但保持它被覆盖并且什么都不做),当你在 UpdateEditText 中设置文本时,只是以不同的方式威胁它.另一件事是动态递增/递减。它对用户来说可能效果不佳(例如,用户期望值增加 0.1 而忽略单位)。

另外,检查 this .

关于c# - 如何在 NumericUpDown 旋转框中显示不同的单位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21542645/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com