页面树结构
转至元数据结尾
转至元数据起始

C1NumericEdit控件支持上/下(spin)按钮以及下拉计算器。
上/下键递增/递减的值由Increment属性进行指定(默认:1)。
下拉计算器和标准的Windows计算器模型一致,允许最终用户无需离开控件进行计算。

自定义下拉功能

C1Input包含一个强大的自定义下拉框功能,除了标准的日历以及计算器下拉控件之外,该功能允许您创建所需要的任何的下拉编辑框。下拉编辑器和您工程中的窗体一样可以进行可视化编辑。
为创建您自己的自定义下拉编辑器,请使用C1DropDownControl。该控件类型从C1TextBox派生,并添加了自定义的下拉功能以及上/下按钮。
为了在您的控件中创建一个下拉编辑框:

  1. 添加一个窗体到您的工程,并且使其从C1.Win.C1Input.DropDownForm派生,之后在您的C1DropDownControl 上的DropDownFormClassName属性中选择此窗体的类型名称。
  2. 在您的派生自DropDownForm类型的窗体中,您可以在需要的时候设置C1DropDownControl的值(通过

DropDownForm.OwnerControl属性获取该控件对象),或者您可以在此窗体关闭时,通过PostChanges事件设置控件的值。
关于自定义下拉窗体可用选项的详细描述,请参见DropDownForm类参考。同时可以参见 C:\Documents and
Settings\<username>\My Documents\ComponentOne Samples 目录(默认安装)下的自定义下拉功能的通用用户示例。
如果您需要创建一个带有下拉功能的自定义控件,这可以通过从C1DropDownControl 派生一个自定义的控件类型,并覆盖默认的C1DropDownControl.DefaultDropDownFormClassName属性实现。

可编程的格式化,解析以及验证

如果标准的以及自定义的格式不足以满足您的需求,您可以通过设置FormatType属性为UseEvent,然后通过代码在
Formatting事件中对值进行格式化,请参见格式化数据。在您的格式化代码中,您可以使用标准的C1Input 格式化逻辑作为一个辅助或者其他任意目的,只需要调用Format方法。
解析同样可以在Parsing事件的事件处理代码中完成,通过设置FormatType属性为UserEvent。如果需要,您可以使用标准的C1Input解析例程,使用以下的ParseInfo方法:Parse,ParseFixed,ParseFloat,ParseInteger,ParseBoolean 以及
ParseDateTime。
MaskInfo类也提供了一些有用的编辑掩码管理的方法。
当您需要将Value属性和当前用户输入的文本进行同步,请使用UpdateValueWithCurrentText方法。通常,这一同步过程在空间失去焦点是自动完成,但是在某些特定的情况下,您会需要调用此方法并强制更新Value属性的值。更新Value 属性的过程包括解析输入文本,校验,并更新Value属性的值,参见值和文本:显示,验证,更新Value。您也可以仅执行前面两个阶段,解析和校验,而不改变Value的值,通过使用ParseContent以及CheckValidationResult方法。

错误处理

在数据输入表单上,错误处理非常重要。C1Input向开发人员提供了对各种不同的错误条件进行完全控制的能力,比如以下主题所列举的错误。

错误处理

WinForms数据源,比如说ADO.NET以及C1DataObjects,包含一些检测数据逻辑错误的规则,这些规则可以来自于数据源自身或者程序员后期添加,设置RowError属性或者调用SetColumnError方法(C1DataObjects上的SetFieldError )。
您可以使用System.Windows.Form.ErrorProvider组件,显示逻辑的行和列的错误。
为了显示逻辑的列错误,请将ErrorProvider和您希望使用错误提示的C1Input控件放置在一起。
为了在C1DbNavigator控件显示行错误,设置一个ErrorProvider组件的ErrorProvider属性。之后当当前行存在一个错误时,C1DbNavigator将显示一个带有RowError的ToolTip文本的错误图标。

错误的数据显示格式

错误的格式是完全可能发生的,尽管通常在应用程序中已经尽量的避免,但是从数据库或者其他数据源获取的数据仍然可能不匹配C1Input控件定义的编辑掩码。在这种情况下,控件无法显示其格式化的Value属性。尽管C1Input控件具有合理的默认行为对此情况进行处理,您可能也会希望
通知用户有无效数据发生。这可以通过ErrorProvider属性(C1Label控件的(ErrorProvider)完成。如果您设置该属性为一个ErrorProvider组件,C1Input将使用该组件,当其显示无效数据(数据无法被格式化显示在控件上)时,通知错误发生。当检测到错误时,它将调用ErrorProvider.SetControl方法。在此之前,C1Input将触发FormatError事件,在此事件中,您可以自定义错误消息(ErrorProvider ToolTip文本)的内容,同时可以执行其他动作。

用户输入错误

当C1Input在解析或校验输入值时检测到一个错误,它将触发ValidationError事件。紧接着,默认情况下,它将显示一条错误信息。默认行为是可以改变的,并且以不同的方式进行定制:
C1Input控件具有一个ErrorInfo属性,包含影响错误处理的设置(ErrorInfo类的属性):

属性

描述

BeepOnError

如果设置为True,则控件会发出一声蜂鸣,以提示有错误发生。默认:False。

CanLoseFocus

如果设置为True,则控件不管是否存在错误,都允许丢失焦点。默认情况下该属性的值为False,表示控件将使
中保持有焦点状态,直到错误被纠正。注意如果设置
ErrorAction为SetValueOnError或者ResetValue,则会在错误发生之后重置控件的值,之后控件可以正常失去焦点。

ErrorAction

一个枚举值,决定当控件发生错误时,对控件的值进行处理。ErrorAction设置为None(默认值)意味着Value 将保持不变,继续保留为失败的值更新之前的状态。如
果ErrorAction设置为SetValueOnError,则控件的Value属性将设置为在ErrorInfo类上的ValueOnError属性指定的值。如果ErrorAction设置为ResetValue,则控件的值将设置为控件进入编辑态之前的值。设置ErrorAction属性为ThrowException将中断程序执行,并抛出一个异常,异常的类型为ValidationException。

ErrorMessage

错误信息显示在标准的消息对话框和/或者在异常信息中。

ErrorMessageCaption

显示在错误消息对话框标题栏上的文本。

ErrorProvider

获取或设置一个ErrorProvider对象,用来指示控件的错误状态。

ShowErrorMessage

如果设置为True(默认值),则显示标准的错误消息。

ValueOnError

如果ErrorAction设置为SetValueOnError,用来重置控件的值。

ValueOnErrorIsDbNull

一个布尔类型的属性,用作设置ValueOnError为DBNull
(仅在设计时有用)。

除此之外,ErrorInfo.ErrorMessage可以被特定的动作指定:编辑掩码错误(MaskInfo.ErrorMessage),解析
(ParseInfo.ErrorMessage),pre-以及post-校验(PreValidation.ErrorMessage,PostValidation.ErrorMessage)。如果一个特定的错误消息没有在这些子对象中指定,则控件上的ErrorInfo.ErrorMessage将生效。注意,您如果您设置
ErrorProvider属性为一个ErrorProvider组件,同时设置ShowErrorMessage为False,则可以使用ErrorProvider的图标显示错误,而不再是显示一个消息对话框。
以上所列举的属性,一旦设置在控件的ErrorInfo对象上,将影响该控件全部的错误处理。当错误发生时,这些值可以通过编程方式自定义以处理特定的错误。这通过传递ErrorInfo参数至ValidationError事件实现。传递给ValidationError事件的ErrorInfo参数是控件上ErrorInfo对象的一个副本,包含了其全部的属性设置。它是一个独立的副本,因此您可以修改位于事件参数中的ErrorInfo对象的属性,仅针对当前的错误,而不会影响控件整体的ErrorInfo设置。通过设置
ValidationError事件中的ErrorInfo属性,您可以指定如何处理错误。例如,您可以通过设置ShowErrorMessage属性值为 False,以禁止标准的错误消息(作为替代,显示您自己的消息通知),或者您可以修改ValueOnError(设置ErrorAction 为SetValueOnError),在或者修改ErrorMessage的内容。请记住,您必须设置传递给ValidationError事件的ErrorInfo参数,而不是控件上的ErrorMessage属性。
在ValidationError事件之后,错误处理将按照在事件参数中指定的ErrorInfo参数的值进行处理。如果ErrorAction设置为 ThrowException,则将抛出一个异常(使用ErrorMessage属性的文本)。如果BeepOnError设置为True,则控件发出一声蜂鸣。如果ShowErrorMessage设置为True,则将显示标准的错误消息(使用ErrorMessage的文本)。在此之后,控件的值可能会发生变化,依照ErrorAction指定的行为。最后,如果校验是由于尝试移动焦点至其他控件的行为所触发,移动焦点至其他控件的行为要么会取消,要么允许,按照CanLostFocus的不同设置。如果ErrorProvider属性设置为一个
ErrorProvider组件,该组件将用作显示如果errorprovidererrorprovider属性设置为一个组件,该组件将在出错的控件附近显示一个错误图标,同时具有一个ErrorMessage信息的工具提示(调用ErrorProvider.SetError方法)。
如果您通过编程方式在某个事件的处理代码中执行了解析或者校验,并且在离开该事件处理函数时返回了一个错误条件(设置事件的Succeed参数为False),您可以描述该错误,并可以通过设置传递给该事件的ErrorInfo参数的属性指定如何处理该错误。类似的事件参数由以下事件提供:PreValidating,Parsing以及PostValidating。其初始值来自于控件的 ErrorInfo属性。您在事件中修改的ErrorInfo参数在之后将传递给ValidationError事件,在此您可以像以上提到的那样对其做进一步的修改。

处理Null值和空值

没有适当的工具,Null值(DBNull)将很难处理。C1Input提供灵活的规则用来处理Null值,允许程序员能够解决遇到的各种实际问题。

显示Null值和空值

当控件处于非编辑状态或者为只读状态时,表示Null值的文本将按照NullText属性指定的内容显示(可以被
DisplayFormat属性设置覆盖)。如果EmptyAsNull设置为True(默认值:False),则空字符串也显示和NullText字符串一样的内容。EmptyAsNull属性也可以被派生类重写。在编辑模式下,EditFormat对象的NullText以及EmptyAsNull属性生效,而不是DispalyFormat。
在具有有效的EditMask的编辑模式,Null值和空值字符串显示为一个空白掩码,由文本字符和填充未输入位置的提示字符组成。
当使用DateTimeInput属性设置为True,编辑日期事件类型的值时,Null值由空白控件表示。当用户通过一个键盘敲击或者鼠标单击开始编辑时,控件将立即变为非空值,该值为上一次指定给控件的非空值或者今日的日期。
在编程方式格式化((FormatType设置为UseEvent)时,Formatting事件仅在非Null值上调用。

输入Null值和空值

除非在编辑掩码模式或者DateTimeInput属性设置为True的日期时间编辑模式,用户可以通过以下方式输入一个Null 值:
如果控件的文本等于NullText,则结果值为Null。有效的NullText值由NullText决定。和NullText进行比较将是大小写敏感的,不依赖于CaseSensitive属性的设置。
如果C1TextBox.EmptyAsNull属性设置为True(默认为False),则清空控件,输入一个空白字符串将导致Null值出现。
在编程方式解析时,DBNull值可以由程序员在Parsing事件中返回。
如果用户输入一个Null值(可以通过输入一个空白字符串或者和NullText相同的值,参见上文),则输入字符串校验或解析将被跳过,参见输入字符串校验(PreValidation)以及解析(Updating)数据。然而,在这种情况下
PostValidation将被执行,参见输入值校验(PostValidation)。

  • 无标签