Skip to content

Control Replacement Primer

Upgrading a control has three types of work:

1) upgrading the object model and members in logic

Section titled “1) upgrading the object model and members in logic”

Good news is that this is the same as upgrading a standard (i.e. non-control) API

You will typically name the replacement control in the coClass a the bottom of the IDF. For example:

...
<coclass id="fpText" migName="System.Windows.Forms.RichTextBox" migStatus="External" role="control">
<subclass id="IfpText"/>
<subclass id="_DfpText"/>
</coclass>
<coclass id="fpMask" migName="System.Windows.Forms.MaskedTextBox" migStatus="External" role="control">
<subclass id="IfpMask"/>
<subclass id="_DfpMask"/>
</coclass>
<coclass id="fpDateTime" migName="RadDateTimePicker" role="control">
<subclass id="IfpDateTime"/>
<subclass id="_DfpDateTime"/>
</coclass>
<coclass id="fpDoubleSingle" migName="System.Windows.Forms.NumericUpDown" migStatus="External" role="control">
<subclass id="IfpDoubleSingle"/>
<subclass id="_DfpDoubleSingle"/>
</coclass>
<coclass id="fpLongInteger" migName="System.Windows.Forms.NumericUpDown" migStatus="External" role="control">
<subclass id="IfpLongInteger"/>
<subclass id="_DfpLongInteger"/>
</coclass>

Notice that adding role=control is needed to make sure the objects are added to their parent containers

If a control is being migrated to a component, do not use role=control

  • event arg types
  • event name changes
  • event handler arguiments — these are statements added to the event handler to setup the old style event args as local variables in the handler.
<event id="ItemClick" netName="ItemClick" migStatus="mscomctl" role="event"
netHandler="System.Windows.Forms.ListViewItemSelectionChangedEventHandler"
netArgs="ListViewItemSelectionChangedEventArgs" migPattern="ItemSelectionChanged" >
<argument id="item" type="ListItem" status="ByVal" migPattern="%1d = e.Item" />
</event>

3) Designer code — property initialization

Section titled “3) Designer code — property initialization”
  • these are specifications for what properties to set in teh designer.cs code file adn how to set them
<!--
**********************************************************
* Statusbar Designer Code
**********************************************************
-->
<migClass id="NetControl.StatusBar"
migName="System.Windows.Forms.StatusStrip"
parent="StatusBar"
>
<property id="Font" value="Font" type="FontInfo"
nPram="3"
vbnPattern="New System.Drawing.Font(\s%1d\s, %2d!, %3d, System.Drawing.GraphicsUnit.Point, CType(0,Byte))"
cshPattern="new System.Drawing.Font(\s%1d\s, %2dF, %3d, System.Drawing.GraphicsUnit.Point, (System.Byte)(0))"
/>
<property id="Location"
value="(Left,Top)"
nPram="2"
vbnPattern="New System.Drawing.Point(%1d, %2d)"
cshPattern="new System.Drawing.Point(%1d, %2d)"
/>
<property id="Name" type="string"
value="SYM.name"
/>
<property id="Size"
value="(Width,Height)"
nPram="2"
vbnPattern="New System.Drawing.Size(%1d, %2d)"
cshPattern="new System.Drawing.Size(%1d, %2d)"
/>
<property id="TabIndex" type="Integer"
value="TabIndex"
default="0"
/>
</migClass>

Setting a color property in the designer

The following example shows how to map a color in designer code.

<migClass id="NetControl.fpDoubleSingle" migName="NumericUpDown" parent="fpDoubleSingle">
<property id="BackColor" type="OLE_COLOR"
value="IfpDoubleSingle.BackColor"
nPram="3"
migPattern="System.Drawing.Color.FromArgb(%3d, %2d, %1d)"
default="System.Drawing.SystemColors.WindowText"
/>