我可以隐藏 NumericUpDown 控件中的值吗?

发布于 2024-09-12 19:30:40 字数 143 浏览 10 评论 0原文

假设我们在控件的值字段中显示了 0,我希望如果该值为 0 - 显示 string.Empty (我知道值的类型是小数,并且不能插入字符串来代替小数,但仍然......也许那里可能有一些格式?)。

Lets say we have 0 displayed in value field of the control and I want that if the value is 0 - display string.Empty (I know that the type of value is decimal and there can be no string inserted instead of decimals in it, but still... Maybe there is some formatting possible there?).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

掀纱窥君容 2024-09-19 19:30:40

注意:这取决于 NumericUpDown 的当前实现。

您需要做的是创建一个继承自 NumericUpDown 的新控件,以便:

public partial class SpecialNumericUpDown : NumericUpDown
{
    public SpecialNumericUpDown()
    {
        InitializeComponent();
    }

    protected override void UpdateEditText()
    {
        if (this.Value != 0)
        {
            base.UpdateEditText();
        }
        else
        {
            base.Controls[1].Text = "";
        }
    }
}

Note: This is dependent on the current implementation of NumericUpDown.

What you need to do is create a new control that inherits from NumericUpDown such that:

public partial class SpecialNumericUpDown : NumericUpDown
{
    public SpecialNumericUpDown()
    {
        InitializeComponent();
    }

    protected override void UpdateEditText()
    {
        if (this.Value != 0)
        {
            base.UpdateEditText();
        }
        else
        {
            base.Controls[1].Text = "";
        }
    }
}
愁以何悠 2024-09-19 19:30:40
public partial class MyNumericUpDown : NumericUpDown
{
    public override string Text
    {
        get
        {
            if (base.Text.Length == 0)
            {
                return "0";
            }
            else
            {
                return base.Text;
            }
        }
        set
        {
            if (value.Equals("0"))
            {
                base.Text = "";
            }
            else
            {
                base.Text = value;
            }
        }
    }
}
public partial class MyNumericUpDown : NumericUpDown
{
    public override string Text
    {
        get
        {
            if (base.Text.Length == 0)
            {
                return "0";
            }
            else
            {
                return base.Text;
            }
        }
        set
        {
            if (value.Equals("0"))
            {
                base.Text = "";
            }
            else
            {
                base.Text = value;
            }
        }
    }
}
迷你仙 2024-09-19 19:30:40

似乎对更改格式的支持非常有限。

我自己还没有尝试过。但是您可以创建一个子类并重写 UpdateEditText 方法以支持您的自定义格式。像这样的事情:

protected override void UpdateEditText()
{
   this.Text = Value.ToString(); // Insert your formatting here
}

It seems that there is only very limited support for changing the formatting.

I have not tried this myself. But you could create a subclass and override the UpdateEditText method to support your custom format. Something like this:

protected override void UpdateEditText()
{
   this.Text = Value.ToString(); // Insert your formatting here
}
岁吢 2024-09-19 19:30:40

一个更简单的解决方案是调用 ResetText() 方法。您可以通过更改 Value 属性来恢复文本。

禁用 NumericUpDown 控件时隐藏文本并在启用时恢复它的示例代码

private void NumericUpDown_EnabledChanged(object sender, EventArgs e)
    {
        if (numericUpDown.Enabled)
        {
            if (numericUpDown.Tag != null)
            {
                // Restore last value
                numericUpDown.Value = (decimal)numericUpDown.Tag;
            }
        }
        else
        {
            // Save last value
            numericUpDown.Tag = numericUpDown.Value;
            // Just to force value change 
            numericUpDown.Value = (numericUpDown.Value > numericUpDown.Minimum ? numericUpDown.Minimum : numericUpDown.Maximum);
            // Clear text
            numericUpDown.ResetText();
        }
    }

An easier solution is calling the ResetText() method. You can restore the text changing the Value property.

Example code to hide text when NumericUpDown control is disabled, and restore it on enabled

private void NumericUpDown_EnabledChanged(object sender, EventArgs e)
    {
        if (numericUpDown.Enabled)
        {
            if (numericUpDown.Tag != null)
            {
                // Restore last value
                numericUpDown.Value = (decimal)numericUpDown.Tag;
            }
        }
        else
        {
            // Save last value
            numericUpDown.Tag = numericUpDown.Value;
            // Just to force value change 
            numericUpDown.Value = (numericUpDown.Value > numericUpDown.Minimum ? numericUpDown.Minimum : numericUpDown.Maximum);
            // Clear text
            numericUpDown.ResetText();
        }
    }
心房敞 2024-09-19 19:30:40

如果您只想对用户隐藏该值,可以将 ForeColor 设置为与 BackColor 相同,这样 NumericUpDown 中的值将不可见用户。

If you only want to hide the value from the user, you can make ForeColor the same as BackColor so the value inside NumericUpDown will be invisible to the user.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文