Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Current »

The 08/21/2023 version of gmStudio changes how control events are hooked to handlers in designer code.

Prior to the 5/30/2023 release, all events hookup used the specialized delegate form:

this.tvTreeView.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.tvTreeView_NodeClick);

In the last release (5/30/2023), all events hookup here modified to use the simplified form:

this.tvTreeView.NodeMouseClick += this.tvTreeView_NodeClick;

The simplified form was introduced as part of the event handler enhancements implemented with the 5/30 release.  It was selected because it supports both specialized delegates and generic delegates.  However, when one modifies and saves a form in the Visual Studio designer, all of the simplified event handler hookups were removed from the rewritten form!  This makes the form non-functional.  In order for the hookups to be retained by the VS Designer rewriting process, a generic or specialized delegate must be used. 

If you are migrating to a stub control generated by the tool (e.g. the default) then the event will have a generic delegate and no action is needed.  However, if you are migrating to a .NET control (e.g. a WinForms control) then it is likely that the event will require the more traditional specialized delegate form.  This must be specified in the migration rules using a specializedHookup=on attribute in the migration rules for the event, for example:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\gmTestBed\FileExplorer\proj_csh\usr\Mscomctl.ocx.WinForms.Refactor.xml
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 266    <Migrate id="ITreeViewEvents.NodeClick" migName="NodeMouseClick" SpecializedHookup="on" netHandler="System.Windows.Forms.TreeNodeMouseClickEventHandler" netArgs="TreeNodeMouseClickEventArgs" />


Failing to specify this attribute when migrating MSCOMCTL to WinForms, will result in a build error:

ERRNUM: CS0029: Cannot implicitly convert type 'System.EventHandler<System.Windows.Forms.TreeNodeMouseClickEventArgs>' to 'System.Windows.Forms.TreeNodeMouseClickEventHandler'
NETSRC: C:\gmTestBed\FileExplorer\proj_csh\deploy\FileExplorer\frmExploreLite.Designer.cs@318 : InitializeComponent
    this.tvTreeView.NodeMouseClick += new System.EventHandler<TreeNodeMouseClickEventArgs>(this.tvTreeView_NodeClick);

Similar issues are likely to occur with other controls that use specialized delegate events.

We regret this detail was missed when testing the changes for generic events; testing for designer rewrite problems will be standard operating procedure going forward.

The easiest way to correct this is by editing the migration rules files adding specializedHookup="on".  Most of these can be picked up using a search-replace

Old: netHandler="
New: specializedHookup="on"  netHandler="

Some of the sample rules distributed with gmStudio have been updated to reflect this requirement.

Please let us know if you have questions or require assistance.

  • No labels