Providers of the controls classes that are inherited from the abstract ICSSoft.STORMNET.Windows.Forms.Binders.ControlProvider
designed to prevalene in compliance with the type of control and the type of the data object. For example, universal edit.
The class ICSSoft.STORMNET.Windows.Forms.Binders.ControlProvider
GetControl
there is a method that returns a structure ICSSoft.STORMNET.Windows.Forms.Binders.ControlForBindStruct
, which specifies the relationship of the control type value.
There are so-called standartny provider kontrolov ICSSoft.STORMNET.Windows.Forms.Binders.StandardControlProvider
in which GetControl
method is overloaded so that it returns the control to some predefined manner.
Controls returned StandardControlProvider
Type | Control |
---|---|
string | System.Windows.Forms.TextBox |
System.Decimal System.Double System.Int16 System.Int32 System.Int64 System.SByte System.Single System.UInt16 System.UInt32 System.UInt64 |
System.Windows.Forms.TextBox |
System.DateTime | ICSSoft.STORMNET.Windows.Forms.DateTimePicker |
bool | System.Windows.Forms.CheckBox |
Enum | ICSSoft.STORMNET.Windows.Forms.ExtendedComboBox |
ICSSoft.STORMNET.DetailArray | ICSSoft.STORMNET.Windows.Forms.GroupEditBase |
ICSSoft.STORMNET.DataObject | ICSSoft.STORMNET.Windows.Forms.ComboLookup or (depending on settings) ICSSoft.STORMNET.Windows.Forms.LookUp.LookUp |
If you want edited by another type, or another control, you need to define your own provider control and associate it with a type.
There are several common situations:
- To set control for editing the values of the standard типа;
- Editing a non-standard type standard контролом;
- Editing non-standard non-standard control.
ControlForBindStruct
ICSSoft.STORMNET.Windows.Forms.Binders.ControlForBindStruct
- structure that defines a control for editing some properties. For example, Processing date ControlProvider).
For this structure defines three constructors:
ControlForBindStruct(object control, string controlPropName)
— an instance of the control that will edit значение;ControlForBindStruct(object control, string controlPropName, Type[] typeMapping)
— name significant properties of the control, i.e., which is and returns значение;ControlForBindStruct(object control, string controlPropName, Type[] typeMapping, IComponent[] additionalControls)
— mapping (chain explicit or implicit conversions) of types used in the case when significant property is not supported directly the desired type, but is supported by another, to which the type can be converted. If this mapping is specified, then setting the value in the property control conversion occurs sequentially on the specified type starting from the beginning of the array, and if back (if you are installing from a property control in a property of the data object), then the end of the array.
Control
control
- an instance of the control that will edit the value.
var txtbox = new System.Windows.Forms.TextBox();
var dateTimePicker = new ICSSoft.STORMNET.Windows.Forms.DateTimePicker();
ControlPropName
controlPropName
- name significant properties of the control, i.e., which is set and returns the value.
Naprimer:_
- for control type
System.Windows.Forms.TextBox
: “Text”. - for control type
System.Windows.Forms.CheckBox
: “Checked”. - for control type
System.Windows.Forms.ComboBox
: “Text”. - for control type
ICSSoft.STORMNET.Windows.Forms.DateTimePicker
: “ObjectValue”. - …
TypeMapping
typeMapping
is an array used to maprounea value types, which should work control
.
Naprimer:_
1.If the value of type System.String
will be processed using System.Windows.Forms.TextBox
, the mapping can be omitted:
new ControlForBindStruct(new System.Windows.Forms.TextBox(), "Text")
2.If the value of type ICSSoft.STORMNET.UserDataTypes.NullableDateTime
will be processed using ICSSoft.STORMNET.Windows.Forms.DateTimePicker
that works with the type System.DateTime
, it must implement the mapping (a complete example in the article Processing date ControlProvider):
ControlForBindStruct(new ICSSoft.STORMNET.Windows.Forms.DateTimePicker(), "ObjectValue",
new System.Type[] {typeof(ICSSoft.STORMNET.UserDataTypes.NullableDateTime),
typeof(System.DateTime)})
3.If the value of type ICSSoft.STORMNET.UserDataTypes.NullableDecimal
will be processed using System.Windows.Forms.TextBox
that works with the type System.String
, the required chain mapping, because the system knows how to translate ICSSoft.STORMNET.UserDataTypes.NullableDecimal
in System.Decimal
, and System.Decimal
already in System.String
.
ControlForBindStruct(new System.Windows.Forms.TextBox(), "Text",
new Type[] { typeof(ICSSoft.STORMNET.UserDataTypes.NullableDecimal),
typeof(Decimal), typeof(string) }
Description private provider of controls
In fact, in all cases, the creation of the control is through a standard provider of controls, but pre-standard provider checks the associated with the type of provider control. Standard provider returns the predefined controls only when no other associate of the provider or the associated provider method returned null
or ControlForBindStruct.Empty
.
To create the custom provider controls, you must unasledovala from ICSSoft.STORMNET.Windows.Forms.Binders.ControlProvider
and override the method GetControl
. It has parameters:
string ApplicationType
— type applications (some string identifying a type of user interface);Type type
— type values which you want to edit контролом;ICSSoft.STORMNET.View
View — the view in which the object is данных;string propertyName
— the property name of the data object that you want to edit.
An example can be found in DateTimePicker.
Return control is possible depending on combination of values of these parameters, i.e. the flexibility to customize the user interface.
The method returns a structure ICSSoft.STORMNET.Windows.Forms.Binders.ControlForBindStruct
in the design which indicate:
System.Object control
System.String controlPropName
System.Type[] typeMapping
Note: linking a control with a value occurs through standard .Net
-binding. I.e., link control needs to understand» «type values.
Association provider controls type
Once the provider is created, you must associate it with a type. For this is the attribute ICSSoft.STORMNET.Windows.Forms.Binders.ControlProviderAttribute
. Parameter specifies the provider type.
Naprimer:_
[ICSSoft.STORMNET.Windows.Forms.Binders.ControlProvider(typeof(ДеньгиTextBoxControlProvider))]
public struct Деньги //By the way, an example of a custom type
{
//Etc.
Obviously, this method is useful for custom types. But what about the standard types, they do not attribute the attribute?
There is another mechanism, installation of the provider controls, which handles all the types. To accomplish this, you should set a static property StandardControlProvider.ControlProviderForNotCustomizedTypes
provider controls.
Primer:_
StormNetForms.Binders.StandardControlProvider.ControlProviderForNotCustomizedTypes=new РесурсControlProvider();
Setting the control for editing the value of a standard type
You must implement the provider controls and set it in a static property StandardControlProvider.ControlProviderForNotCustomizedTypes
.
Editing non-standard type standard control
You must implement the provider controls indicating matirovanie types and associate it with a type, or set it in a static property StandardControlProvider.ControlProviderForNotCustomizedTypes
.
Editing non-standard non-standard control
You need to create a control for editing values of custom types.
To do this:
- Implement control as the heir from
ICSSoft.STORMNET.Windows.Forms.Binders.BindableUserControl
- Control must have a meaningful property and event signaling about the change of the value with the name
ХХХХХChanged
, where XXXXX is the name of the significant properties. Event have to cock when you change the value of the most significant properties. - The control can implement the interface
ICSSoft.STORMNET.Windows.Forms.ICustomizableControl
for more accurate adjustment depending on the class of the data, presentation, name of the property. - Control can also implement the interface
ICSSoft.STORMNET.Windows.Forms.IButtonizableControl
specially for more convenient input of values viaICSSoft.STORMNET.Windows.Forms.GroupEditBase
.
Next, you implement the provider controls and to associate it with a type, or set it in a static property StandardControlProvider.ControlProviderForNotCustomizedTypes
.
General comments on the providers control
Because the type and other parameters come in overloaded method GetControl
provider, of course, no need to make one provider for each control. You can use one of several types, or create a single provider controls the entire system and install it in StandardControlProvider.ControlProviderForNotCustomizedTypes
.