回复 4楼ghostlyt的帖子
了解。
你看这么着能不能解决你的问题。
有一个神秘的属性叫做ValueSign,默认情况下你把它设置为Positive,仅允许输入正值(这样连你键盘输入的处理也免了)
我猜测通过某些计算得出负值的情况肯定是通过代码设置Value属性送进去的。这样的话,我们做一些特殊的处理,允许负值设置进去,代码如下:
============- public Form1()
- {
- InitializeComponent();
- this.gcNumber1.ValueSign = ValueSignControl.Positive;
- this.gcNumber1.TextChanging += gcNumber1_TextChanging;
- }
- private void SetNegativeValueToGcNumber(GcNumber gcNumber, decimal value)
- {
- // 本方法设计用来送入负值,一切正值皆不干活。
- System.Diagnostics.Debug.Assert(value < 0m);
- gcNumber1.ValueSign = ValueSignControl.NoControl;
- gcNumber1.Value = value;
- }
- void gcNumber1_TextChanging(object sender, TextChangingEventArgs e)
- {
- // 虽然基于某些业务要求,Number可以计算出正值,但是原则上一旦开始输入,就将这个正值的限制重置回来。
- var text = e.Result;
- var gcNumber = sender as GcNumber;
- if (gcNumber == null)
- {
- return;
- }
- if (string.IsNullOrEmpty(text))
- {
- gcNumber.ValueSign = ValueSignControl.Positive;
- return;
- }
- decimal targetValue;
- if (decimal.TryParse(text, out targetValue))
- {
- if (targetValue >= 0)
- {
- gcNumber.ValueSign = ValueSignControl.Positive;
- }
- }
- }
- private void button1_Click(object sender, EventArgs e)
- {
- SetNegativeValueToGcNumber(this.gcNumber1, -1);
- }
复制代码 ============ |