2017-02-23 28 views
0

我使用工具箱在我的应用程序中创建了winform控件。我还在设置页面中设置了这些控件的默认值,最小值和最大值。然后,我将这些控件限制在一个对象中。一些看起来是这样的:验证绑定到对象的c#winform控件

private void InitializeBinding() 
    { 
     enable_checkbox.DataBindings.Add("Checked", ObjectConfig, "enable"); 
     area_numeric.DataBindings.Add("Value", ObjectConfig, "area"); 

    } 

和我ObjectConfig类有这样的:

class ObjectConfig { 
    private bool bEnable; 
    private int iArea; 

    public bool enable 
    { 
    get { return bEnable; } 
    set { bEnable = value; } 
    } 

    public int area 
    { 
    get { return iArea; } 
    set { iArea = value; } 
    } 
} 

结合是伟大的工作。没有任何问题。然后,我将此对象转换为xml,并将其保存到配置xml文件中。问题是如果某人将xml文件中的区域值更改为超出设置的最小值和最大值以及xml被加载并转换为对象时,由于对象绑定到具有最小值和最大值的控件,因此出现错误。有没有一种好的方法来提供这种类型的方法验证?

+0

是硬编码的最小值和最大值?或者你从哪里得到它们? –

+0

在控件的设置下设置最小值和最大值。 – Redis1001

回答

0

您可以在属性的setter中约束它,并检查它是否在限制范围内。你可以把极限值为项目属性变量,像这样(对不起,德语版Dictionary):

enter image description here

而在二传,你可以检查这些范围和存取权限的变量,如下列:

public class ObjectConfig 
{ 
    private bool bEnable; 
    private int iArea; 

    public bool enable 
    { 
     get { return bEnable; } 
     set { bEnable = value; } 
    } 

    public int area 
    { 
     get { return iArea; } 
     set 
     { 
      if (value < Properties.Settings.Default.AreaMin) 
      { 
       iArea = Properties.Settings.Default.AreaMin; 
      } 
      else if (value > Properties.Settings.Default.AreaMax) 
      { 
       iArea = Properties.Settings.Default.AreaMax; 
      } 
      else 
      { 
       iArea = value; 
      } 
     } 
    } 
} 

通过这种方式,无论用户在* .XML文件中进行编辑,您的值都将始终在设定的范围内。

+0

谢谢你的回答。这当然是可能的。但是,将来有可能ObjectConfig的属性会达到大约10个以上。尽可能地,我不想硬编码每个属性的所有10个最小值和最大值。没有其他方法吗? – Redis1001

+0

@ Redis1001我没有真正关注如何实现最小值和最大值。我回答了您的验证方法请求。这是您可以避免将不允许的值分配给属性的方式。管理您的最小值和最大值取决于您。 :) –

+0

@ Redis1001如果最小值和最大值设置为“在控件设置下”,为什么不使用这些值? –