This article is an adapted port to C# of my
other article. The code of this article
implements some forms that synchronize the active state with the owner form.
- Forms that can synchronize the active state with a owner form;
- Forms that automatically hide when the application is deactivated and when
the owner form is minimized or hidden;
- Forms that are automatically disabled when owner form is disabled.
I will base these examples in the source-code of the demo application included in this
Add a reference to the assembly Rgl.Windows.Forms.dll in your
If you are implementing a dialog box or frame window derive your class from
Rgl.Windows.Forms.Form, or else, derive your class from
Rgl.Windows.Forms.FloatingForm (i.e. if your form will be a toolbar or
public class Form1 : Rgl.Windows.Forms.Form
public class FloatingForm1 : Rgl.Windows.Forms.FloatingForm
For sample usage refer to the demo application and source-code.
true when this Form is being draw in the active state.
true if this Form will synchronize the active state with owner Form.
true if this Form will stay visible when application is deactivated.
Call this to change the visible state of this form.
Sometimes we cannot use the
Visible property of the Form because when we set it
true the Form is also activated; by using this method we can specify if we want
to activate the form or not.
Virtual methods (to override if needed)
Called when the
ForceActive property is changed.
Called when this Form is being created.
If you want to create and display some floating forms at the creation time of this
Form you should create them in this method and not in the
OnLoad method or
event handler (read more about this in the BaseForm.cs file).
Under the hood
The key for synchronizing the active state of a form lies on the
message. By handling or sending this message we can force the painting of a form in the active
or inactive state.
The automated hiding of a form is archived by handling the
The other two important messages that need to be handled are
WM_SHOWWINDOW (handled by overriding
OnVisibleChanged); you can find
information about them in the source code and in the
To finish, I just want to say that when implementing this assembly I have run into some
"strange" problems, read all about them in the source-code.
Do you have any question or comments? Contact me!