VB Migration Partner

KNOWLEDGE BASE - Forms and controls


Previous | Index | Next 

[PRB] Label and Image controls appear in front of other controls

VB6 Label and Image controls are lightweight controls, which means that they don’t actually correspond to actual Windows controls. Instead, the corresponding label or image are just “drawn” over the parent form’s surface (or more in general, the surface of the container control). For this reason, a VB6 Label or Image control can never appear in front of other non-lightweight controls.

Another way for explaining this fact is that VB6 manages two distinct ZOrder planes: one for standard controls and one for lightweight controls: a control in the lightweight ZOrder plan can never appear in front of any control in the main ZOrder plane. If two or more lightweight controls overlap, their TabIndex property dictates which control appears on top of the others.

The .NET Framework manages neither lightweight controls nor multiple ZOrder planes, therefore all VB6Label and VB6Image control may actually appear in front of other controls. If this is the case, you can solve the problem in many ways:

  1. You use the BringToFront or SendToBack pragmas to precisely control the ZOrder of all the controls in a given form
  2. Manually fix the visibility of migrated controls inside the Visual Studio designer, save the resulting *.Designer.vb file in a safe location on disk, and then use the PostCommand pragma to force VB Migration Partner to use this modified .NET form at each subsequent migration.
  3. Set the VB6Form.ArrangeLightweightControls property to true, to automatically send lightweight controls “behind” regular controls in all forms of the migrated application.
  4. Use the VB6Utils.ArrangeLightweightControls method to fix the lightweight controls’ ZOrder for a specific form.

Starting with VB Migration Partner version 1.32 you can use VB6Form.ArrangeLightweightControls static property to force migrated .NET applications to behave exactly as in VB6, without any further manual intervention on your part. All you need to do is setting this property to True before loading the first form in the application:

        Sub Main()
            VB6Form.ArrangeLightweightControls = True
            Form1.Show()
        End Sub

The initial (default) value of the ArrangeLightweightControls property is False, because rearranging the controls when the form starts is a time-consuming operation – especially with forms that contains hundreds controls. If you are concerned about loading speed, manually fixing the ZOrder of individual controls – as described by options a) and b) – is the recommended solution.

The VB6Form.ArrangeLightweightControls property suffers from two minor limitations: it isn’t granular (it slows down all forms in the application, including those that don’t strictly require it) and doesn’t affect controls that are added dynamically via code after the form has been loaded. You can work around these limitations by manually invoking VB6Utils.ArrangeLightweightControls method, as in this example:

        ' dynamically add a label control
        Dim newLabel As VB6Label = Me.Controls6.Add("VB.Label", "newLabel")
        ' ensure the new label goes behind all standard controls
        VB6Utils.ArrangeLightweightControls()
        ' make it visible
        newLabel.Visible = True
Previous | Index | Next 




Follow Francesco Balena on VB6 migration’s group on

LinkedIn





Read Microsoft Corp’s official case study of a VB6 conversion using VB Migration Partner.




Code Architects and its partners offers remote and onsite migration services.

More details




Subscribe to our free newsletter for useful VB6 migration tips and techniques.

newsletter



To learn more about your VB6 applications, run VB6 Analyzer on your source code and send us the generated text file. You will receive a detailed report about your VB6 applications and how VB Migration Partner can help you to quickly and effectively migrate it to .NET.

Get free advice



A fully-working, time-limited Trial Edition of VB Migration Partner allows you to test it against your actual code

Get the Trial




The price of VB Migration Partner depends on the size of the VB6 application, the type of license, and other factors

Request a quote




Migrating a VB6 application in 10 easy steps

Comparing VB Migration Partner with Upgrade Wizard

Migration tools: Feature Comparison Table

All whitepapers