用于指定属性或字段的显示格式的属性

发布于 2024-09-04 17:20:09 字数 103 浏览 5 评论 0原文

目前,我已经使用与 Windows 窗体中的验证相关的属性来装饰业务对象中的属性。

我想添加确定数据格式的属性。这有望与数据绑定无缝配合。

有办法做到这一点吗?

I currently already decorate properties in my business objects with attributes related to validation in Windows Forms.

I would like to add attributes that would determine how the data is formatted. This would hopefully work seamlessly with data binding.

Is there a way to do this?

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

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

发布评论

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

评论(1

榕城若虚 2024-09-11 17:20:09

格式化(在 winforms 中)通过两种主要方法实现:

  • 对于粗粒度格式化,重写 ToString()
  • 来实现细粒度格式化,定义一个 TypeConverter 子类,并使用 < code>[TypeConverter(...)] 在您的自定义类型(或类的属性等)上,以应用您的格式(当目标类型为 typeof(string) 时)

例如:

using System;
using System.ComponentModel;
using System.Windows.Forms;
class MyObject
{
    [TypeConverter(typeof(MyConverter))]
    public decimal SomeValue { get; set; }
}

class MyConverter : TypeConverter {
    public override object  ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, System.Type destinationType)
    {
        if(destinationType == typeof(string)) {
            return "Our survery says: " + value + "%";
        }
         return base.ConvertTo(context, culture, value, destinationType);
    }
}
static class Program {
    [STAThread]
    static void Main() {
        using(var form = new Form()) {
            form.DataBindings.Add("Text",new MyObject { SomeValue = 27.1M}, "SomeValue", true);
            Application.Run(form);
        }
    }
}

Formatting is achieved (in winforms) via two primary approaches:

  • for coarse-grained formatting, override ToString()
  • for fine-grained formatting, define a TypeConverter subclass, and use [TypeConverter(...)] on your custom type (or properties of a class, etc), to apply your formatting (when the target type is typeof(string))

For example:

using System;
using System.ComponentModel;
using System.Windows.Forms;
class MyObject
{
    [TypeConverter(typeof(MyConverter))]
    public decimal SomeValue { get; set; }
}

class MyConverter : TypeConverter {
    public override object  ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, System.Type destinationType)
    {
        if(destinationType == typeof(string)) {
            return "Our survery says: " + value + "%";
        }
         return base.ConvertTo(context, culture, value, destinationType);
    }
}
static class Program {
    [STAThread]
    static void Main() {
        using(var form = new Form()) {
            form.DataBindings.Add("Text",new MyObject { SomeValue = 27.1M}, "SomeValue", true);
            Application.Run(form);
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文