Windows Forms Controls
FAQ Home
1.
How do you prevent serialization of certain child controls in your Composite
Control?
2. How do I get hold of the currently focused Control?
3. Why do calling Focus() on a control not set focus on it?
4. How do I programatically change the color of a control?
5. How can I change the Border color of my control?
6. Why should I provide a Non-Client border to my Control
derived class?
7. How do I provide a 2 pixel 3d border in the Non-Client area
of my Control derived class?
8. How do I provide a 1 pixel border in the NonClient area of
my Control?
9. How do I invalidate a control including it's NonClient
area?
10. How can I implement a scrollable picture box?
11. How can I put Controls, a ProgressBar for example, into a
StatusBar?
12. How do I implement an ownerdrawn statusbar so I can put a
progressbar in it?
13. How would I change the icon that appears on the toolbox
for a custom control?
14. A control's Validating event is hit even when the user
clicks on the Close box. How can I avoid this behavior?
15. I would like to prevent validation in my textbox when the
user clicks on my Cancel button, how do I do this?
16. Why do the XP Icons that have alpha channel not draw
properly when associated with controls like ListView?
17. Why do the XP Icons when drawn using Graphics.DrawImage
not draw transparently?
18. How do I prevent resizing of my Controls by the user, via
Docking or anchoring or manual resizing during design-time?
19. What control do I use to insert Separator lines between
Controls in my Dialog?
20. How can I make my controls transparent so the form's
background image can show through them?
21. How do I create an editable listbox with an in-place
TextBox and Button?
22. How can I programmatically manipulate Anchor styles?
23. How can I place a border around a PictureBox?
24. What is the best method to override in custom Controls to
perform custom initialization during runtime?
25. How do I determine the width/height of the Non-Client
area (like the border in a textbox) of a Control?
26. I set a Control's Visible property to true and in the
immediate next statement, it returns false. Why doesn't setting the Visible
property 'take'?
27. I'm trying to make the background of my linklabel
transparent so a picturebox will show through it. However, if I set the link
label's BackColor property to Transparent the label still has a white
background. Why?
28. How do I dynamically load a control from a DLL?
29. What is the (DynamicProperties) item listed on a
control's property page in VS.NET?
30. How can I make a Panel or Label semi-transparent on a
Windows Form?
31. How can I add a control to a Window Form at runtime?
32. How do I make the arrow keys be accepted by a control
(such as a button) and not handled automatically by the framework's focus
management?
33. In the property browser for a custom control, how do I
disable a property initially, but enable it later based on some other
property changing?
34. How can I have the control designer create the custom
editor by calling the constructor with the additional parameters rather than
the default constructor?
1 How do you prevent serialization of certain child
controls in your Composite Control?
(Technique used in TabControlExtDesigner)
I implemented a IdesignerSerializationProvider interface and
its GetSerializer virtual.
I registered it from my tabcontrol designer's Initialize override via the
IdesignerSerializationManager "Service".
The above GetSerializer method gets called before and whenever
serialization takes place. It returns null always.
When it does get called for the Control.Collection type, I
know designer is trying to serialize the Controls collection and so, I will
remove the unserializable child Controls from my tab control temporarily.
Serialization will proceed without these controls and later in my tabcontrol
OnPaint handler, I will Add the temporarily removed Controls.
2 How do I get hold of the currently focused Control?
The .Net framework libraries does not provide you an API to query for the
focused Control. You have to invoke a windows API to do so:
[C#]
public class MyForm : Form
{
[DllImport("user32.dll", CharSet=CharSet.Auto, CallingConvention=CallingConvention.Winapi)]
internal static extern IntPtr GetFocus();
private Control GetFocusedControl()
{
Control focusedControl = null;
// To get hold of the focused control:
IntPtr focusedHandle = GetFocus();
if(focusedHandle != IntPtr.Zero)
// Note that if the focused Control is not a .Net
control, then this will return null.
focusedControl = Control.FromHandle(focusedHandle);
return focusedControl;
}
}
[VB.Net]
Public Class Form1
' Declare the GetFocused method here:
Public Shared Function GetFocus() As IntPtr
End Function
Private Function GetFocusedControl() As Control
Dim focusedControl As Control = Nothing
' To get hold of the focused control:
Dim focusedHandle As IntPtr = GetFocus()
If IntPtr.Zero.Equals(focusedHandle) Then
' Note that if the focused Control is not a .Net control, then this will
return null.
focusedControl = Control.FromHandle(focusedHandle)
End If
Return focusedControl
End Function
End Class
3 Why do calling Focus() on a control not set focus on
it?
Note that when you call this method the control should be visible, otherwise
the focus will not be set. Hence calling this in say Form_Load on a control
in the form will be ineffective. You should instead consider give that
control an appropriate TabIndex, so that it will be the first focused
control.
4 How do I programatically change the color of a
control?
Use the properties BackColor and ForeColor.
button1.BackColor =
Color.White;
button1.ForeColor = Color.Blue;
5 How can I change the Border color of my control?
Override the OnPaint. Here is some code for a derived Button.
[C#]
public class MyButton : Button
{
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
int borderWidth = 1;
Color borderColor = Color.Blue;
ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle,
borderColor,
borderWidth, ButtonBorderStyle.Solid, borderColor,
borderWidth,
ButtonBorderStyle.Solid, borderColor, borderWidth,
ButtonBorderStyle.Solid,
borderColor, borderWidth, ButtonBorderStyle.Solid);
}
}
[VB.NET]
Public Class MyButton
Inherits Button
Protected Overrides Sub OnPaint(e As PaintEventArgs)
MyBase.OnPaint(e)
Dim borderWidth As Integer = 1
Dim borderColor As Color = Color.Blue
ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle,
borderColor, borderWidth, ButtonBorderStyle.Solid, borderColor, borderWidth,
ButtonBorderStyle.Solid, borderColor, borderWidth, ButtonBorderStyle.Solid,
borderColor, borderWidth, ButtonBorderStyle.Solid)
End Sub 'OnPaint
End Class 'MyButton
6 Why should I provide a Non-Client border to my Control
derived class?
Providing a border in the non-client region of your control rather than in
the ClientRectangle has very many advantages:
When you include a scrollbar in your control, the scrollboar will appear
inside the border, rather than to the outside if you drew the border in the
client area.
When you allow custom painting of the control, your user will not draw over
the NC border.
Your own client painting code will be simplified in that you will not have
to bother about taking the border into account while painting the client
area. The next faq will tell you how to include a non-client border.
7 How do I provide a 2 pixel 3d border in the Non-Client
area of my Control derived class?
You can do so as follows by overriding the CreateParams
property in your Control. The advantage with this approach is that drawing
is handled by the system as soon as you set the flag below.
protected override
CreateParams CreateParams
{
get
{
CreateParams cparams;
cparams = base.CreateParams;
if(this.need3DBorder)
{
cparams.ExStyle &= ~512;
cparams.Style &= ~8388608 /*WS_BORDER*/;
cparams.ExStyle = cparams.ExStyle | 512 /*WS_EX_DLGFRAME*/;
}
return cparams;
}
}
8 How do I provide a 1 pixel border in the NonClient
area of my Control?
You will have to first provide some space in the NC area by setting the
WS_BORDER flag in CreateParams and then draw the
border yourself by listening to the WM_NCPAINT message in your
Control, as follows:
protected override
CreateParams CreateParams
{
get
{
System.Windows.Forms.CreateParams cp = base.CreateParams;
if(this.needFlatBorder)
{
cparams.ExStyle &= ~512 /*WS_EX_CLIENTEDGE*/;
cparams.Style &= ~8388608 /*WS_BORDER*/;
cp.Style |= 0x800000; // WS_BORDER
}
}
}
protected override void WndProc(ref Message m)
{
if(m.Msg == 133/*WM_NCPAINT*/)
{
this.DrawFlatNCBorder(ref m);
}
base.WndProc(ref m);
}
private void DrawFlatNCBorder(ref Message msg)
{
IntPtr hRgn1 = (IntPtr) msg.WParam;
// The update region is clipped to the window frame. When
wParam is 1, the entire window frame needs to be updated.
IntPtr hdc = NativeMethods.GetDCEx(msg.HWnd, hRgn1, 1/*DCX_WINDOW*/|0x0020/*DCX_PARENTCLIP*/);
if (hdc != IntPtr.Zero)
{
using (Graphics g = Graphics.FromHdc(hdc))
{
Rectangle bounds = new
Rectangle(0,0,this.Width,this.Height);
ControlPaint.DrawBorder(g,bounds,this.borderColor,ButtonBorderStyle.Solid);
// create a clipping region for remaining parts to
be drawn excluding
// the border we did just drew
bounds.Inflate(-1, -1);
IntPtr hRgn2 =
NativeMethods.CreateRectRgn(bounds.Left, bounds.Top, bounds.Right,
bounds.Bottom);
if(hRgn2 == (IntPtr)1)
{
// Provide a new clipping region.
msg.WParam = (IntPtr) hRgn2;
}
else
{
// combine with existing clipping region.
NativeMethods.CombineRgn(hRgn1, hRgn1, hRgn2,
NativeMethods.RGN_AND);
NativeMethods.DeleteObject(hRgn2);
}
}
msg.Result = (IntPtr) 1;
NativeMethods.ReleaseDC(msg.HWnd, hdc);
}
Invalidate();
}
9 How do I invalidate a control including it's NonClient
area?
You can do so as follows in your Control:
private void
InvalidateWindow()
{
NativeMethods.RedrawWindow(this.Handle, IntPtr.Zero,
IntPtr.Zero,
0x0400/*RDW_FRAME*/ | 0x0100/*RDW_UPDATENOW*/
| 0x0001/*RDW_INVALIDATE*/);
}
10 How can I implement a scrollable picture box?
See Mike Gold's article on
C#
Corner for a detailed discussion.
11 How can I put Controls, a ProgressBar for example,
into a StatusBar?
You cannot place controls into a StatusBar control in the
designer. However, you can add any no. of Controls to the StatusBar
programatically through it's Controls property. After adding the Controls,
set their Visible, Location and Bounds property appropriately.
12 How do I implement an ownerdrawn statusbar so I can
put a progressbar in it?
Check out the code posted originally in VB by Jacob Grass, and translated to
C# by Jason Lavigne on the dotnet.discussion newsgroup at
develop.com.
13 How would I change the icon that appears on the
toolbox for a custom control?
You can do this in different ways explained below. In all the cases the
bitmap or icon should follow these rules:
Technique 1:
Use a bitmap (not an icon, in the embedded resource) file implicitly without
specifying the ToolboxBitmapAttribute for the type:
Say, you have a custom control MyControl in the namespace MyNamespace,
create a bmp file MyControl.bmp following the above rules. Add this file to
your project at the top-level and make it an embedded resource. The
project's default namespace should be MyNamespace.
If the control's namespace and the project's default namespace don't match
then move the bitmap to appropriate subfolders so that they match. If this
is not possible, typically when the namespaces are not related at all then
you cannot use this technique, use instead one of the techniques below using
the ToolboxBitmap attribute.
Create the assembly and the next time you add it to the toolbox the custom
image in MyControl.bmp should be available in the toolbox.
This is the easiest technique to implement as it doesn't require you to use
the ToolboxBitmapAttribute in your type defenition.
Technique 2: Use ToolboxBitmap attribute.
Example 1:
Use a bitmap (not icon) in the embedded resource with the same name
as the type.
Default Assembly Namespace: "MyAssemblyNamespace"
namespace MyAssemblyNamespace
{
[ToolboxBitmap(typeof(MyCustomType))]
public class MyCustomType : Component
{...}
}
In the above scenario the runtime will look for a embedded bmp file of name
MyCustomType.bmp in the project's root directory. Note that the default
namespace and the type's namespace match.
Example 2:
If you want your icons in sub-directories then change the attribute
like this:
[ToolboxAttribute(typeof(MyCustomType),
"ToolboxIcons.MyCustomType.bmp")]
or
[ToolboxAttribute(typeof(MyCustomType),
"ToolboxIcons.MyCustomType.ico")]
where the bmp or ico file (yap, now, when you explicity specify the
resource, you can use an ico file) is in a sub-directory called "ToolboxIcons".
Example 3:
Sometimes your type's namespace and the default assembly namespace
may be unrelated, in which case you have to use a different type that has
the same namespace as the default assembly namespace to scope the embedded
image file.
Default namespace: "MyAssemblyNamespace"
namespace MyAssemblyNamespace
{
public class SomeType
{...}
}
namespace DifferentNamespace
{
// Using SomeType which has the same namespace as the default assembly
namespace to scope the embedded resource.
[ToolboxBitmap(typeof(SomeType), "MyCustomType.ico")]
public class MyCustomType
{...}
}
In this case the runtime will look for the above resource at the top-most
directory. If your icons were in a subdirectory named "ToolboxIcons" then
the attribute would look like this:
[ToolboxBitmap(typeof(SomeType),
"ToolboxIcons.MyCustomType.ico")]
14 A control's Validating event is hit even when the
user clicks on the Close box. How can I avoid this behavior?
One way is to add code to your Validating handler and only execute the
validation routine if the mouse is in the client area. This will avoid the
click on the title bar and its system menu. You might also want to add
special handling for the tab key so your validation is hit independent of
the mouse location when you tab off the control.
private bool tabKeyPressed =
false;
private void textBox1_Validating(object sender,
System.ComponentModel.CancelEventArgs e)
{
if(tabKeyPressed ||
this.ClientRectangle.Contains(this.PointToClient(Cursor.Position)))
{
if(boolNotOKValues) //do your validating
e.Cancel = true; //failed
}
tabKeyPressed = false;
}
protected override bool ProcessDialogKey(Keys keyData)
{
tabKeyPressed = keyData == Keys.Tab;
return base.ProcessDialogKey(keyData);
}
15 I would like to prevent validation in my textbox
when the user clicks on my Cancel button, how do I do this?
Say textBox1 and button1 and the control names, then this is how you could
do this:
[C#]
// Handler to the textBox1 Leave event
private TextBox1_Leave(object sender, EventArgs e)
{
If (this.button1.Focused){
this.textbox1.CauseValidation=false;
this.close();
}
}
[VB.Net]
' Handler to the textBox1 Leave event
private TextBox1_Leave(Object sender, EventArgs e)
{
If (Me.button1.Focused)
{
Me.textbox1.CauseValidation=False
Me.close()
}
}
16 Why do the XP Icons that have alpha channel not draw
properly when associated with controls like ListView?
Make sure that you include the manifest file that will enable XP themes
support for you application. Then the icons with alpha channel will draw
semi-transparently.
17 Why do the XP Icons when drawn using
Graphics.DrawImage not draw transparently?
Note that it's only the ImageList class that can draw an Icon with alpha
channel properly. So, instead of using the Graphics.DrawImage
method, first associate this icon to a ImageList and then use the
ImageList.Draw method to draw the icon. Also, note that this is
possible only in XP with XP Themes enabled for that application.
18 How do I prevent resizing of my Controls by the
user, via Docking or anchoring or manual resizing during design-time?
The best place to ensure a particular height/width for you control is in the
SetBoundsCore override of your Control, as follows:
protected override void
SetBoundsCore(int x, int y, int width, int height, BoundsSpecified
specified)
{
int prefHeight = this.GetPreferredHeight();
// Ensure that the height is atleast as big as prefHeight
if(height < prefHeight)
height = prefHeight;
base.SetBoundsCore(x, y, width, height, specified);
}
Protected Overrides Sub SetBoundsCore(ByVal x As Integer, ByVal y As
Integer, ByVal width As Integer, ByVal height As Integer, ByVal specified As
BoundsSpecified)
Dim prefHeight As Integer = Me.GetPreferredHeight()
' Ensure that the height is atleast as big as prefHeight
If height < prefHeight Then
height = prefHeight
End If
MyBase.SetBoundsCore(x, y, width, height, specified)
End Sub
19 What control do I use to insert Separator lines
between Controls in my Dialog?
Use the Label Control with the BorderStyle set to Fixed3D and
height set to 2.
20 How can I make my controls transparent so the form's
background image can show through them?
By default, a control's background color will be the same as the container's
background. In the picture below, the form's background was set to Color.Red.
In design mode, you can see the four controls have the red background, but
since the form's Image was set to a bitmap, you cannot see the form's red
background. To make the controls' background transparent, you can set the
alpha blend value of their background to zero. In code, you could use:
public Form1()
{
InitializeComponent();
checkBox1.BackColor = Color.FromArgb(0, checkBox1.BackColor);
button1.BackColor = Color.FromArgb(0, button1.BackColor);
linkLabel1.BackColor = Color.FromArgb(0, linkLabel1.BackColor);
label1.BackColor = Color.FromArgb(0, label1.BackColor);
// Or use the System.Drawing.Color.Transparent color.
}
In design mode, you can set the alpha blend value to zero by typing the four
component in the property grid. So, for each control's BackColor property,
you would type 0,255,0,0 to make it a tranparent red.
21 How do I create an editable listbox with an in-place
TextBox and Button?
The attached EditableList UserControl implements an editable
listbox with an in-place TextBox and Button allowing users to directly edit
the contents of the list box.
When the user clicks on a selected item, a textbox and a button is shown
over the selected item and the user can directly edit the selectected item
text. The button can be programmed to show for example a
OpenFileDialog to allow user to select a file (useful while
implementing a Files list).
22 How can I programmatically manipulate Anchor styles?
You can do this using the bitwise operators &, | and ^ ( And, Or and Xor (or
&, Or, ^) in VB.Net). Here is code that will toggle label1 being anchored on
the left.
[C#]
private void button1_Click(object sender, System.EventArgs e)
{
if ((label1.Anchor & AnchorStyles.Left) == 0)
{ //add it
label1.Anchor = label1.Anchor | AnchorStyles.Left;
}
else if ((label1.Anchor & AnchorStyles.Left) != 0)
{ //remove
label1.Anchor = label1.Anchor ^ AnchorStyles.Left;
}
}
[VB.NET]
Private Sub button1_Click(sender As Object, e As System.EventArgs)
If(label1.Anchor And AnchorStyles.Left) = 0 Then
'add it
label1.Anchor = label1.Anchor Or AnchorStyles.Left
ElseIf(label1.Anchor And AnchorStyles.Left) <> 0 Then
'remove
label1.Anchor = label1.Anchor Xor AnchorStyles.Left
End If
End Sub 'button1_Click
23 How can I place a border around a PictureBox?
One solution is to use a panel that has a picturebox placed on it with
DockStyle.Fill. This will make the picturebox assume the size of
the panel. In addition, set the DockPadding.All property to
the width of the desired border. Then in the Panel's OnPaint method, call
the baseclass and then paint the desired borders.
Here are both VB and C# projects that illustrate how you might go about
this. The derived PicturePanel class has properties that allow you to set
the bordersize and color as well as the image that is to be displayed. This
sample retrieves the image from an embedded resource. It also uses double
bufferring to minimize flashing as you resize the control.
24 What is the best method to override in custom
Controls to perform custom initialization during runtime?
When custom initialization is to be done during runtime on certain Controls,
the best way is to implement the ISupportInitialize interface
in that Control. Then the BeginInit method will be called as
soon as the Control gets created and EndInit will be called after the
design-time initialization of that control.
25 How do I determine the width/height of the
Non-Client area (like the border in a textbox) of a Control?
One generic way for all Controls is to get the difference between the
ClientRectangle's width and the Control.Bounds' width.
That should give the border width (and in general the NC area width);
similarly for height.
26 I set a Control's Visible property to true and in
the immediate next statement, it returns false. Why doesn't setting the
Visible property 'take'?
A control's Visible property will also depend on it's parent control's (if
any) visible property. If the parent control is not visible, the control
will also return false.
27 I'm trying to make the background of my linklabel
transparent so a picturebox will show through it. However, if I set the link
label's BackColor property to Transparent the label still has a white
background. Why?
Controls with a "Transparent" color actually render their parent's
background, so you're seeing the White background of the Form, not the
PictureBox. Three easy ways to deal with this:
Use a Panel with it's "BackgroundImage" property set instead
of a PictureBox, and parent the LinkLabels to the panel (PictureBoxes
generally don't have children)
Set the BackgroundImage of the Form to the image (basically
the same as 1 above, but avoids the extra control)
In code, set the Parent of the LinkLabel to be the PictureBox. You'll need
to update the LinkLabel's position to match the new origin of the parent if
the PictureBox isn't at (0,0)
(Shawn Burke on microsoft.public.dotnet.framework.windowsforms newsgroup)
28 How do I dynamically load a control from a DLL?
You use System Reflection to dynamically load a control. If the DLL is named
"SpecControls.DLL" and the class you want is "SpecControls.ColorControl",
then use this code.
[C#]
// load the assembly
System.Reflection.Assembly assembly =
Assembly.LoadFrom("SpecControls.DLL");
// get the type
Type t = assembly.GetType("MyControls.MyControl");
// create an instance and add it.
//
Control c = (Control)Activator.CreateInstance(t);
parent.Controls.Add(c);
[VB.NET]
' load the assembly
Dim assembly1 As System.Reflection.Assembly =
Assembly.LoadFrom("SpecControls.DLL")
' get the type
Dim t As Type = assembly1.GetType("MyControls.MyControl")
' create an instance and add it.
'
Dim c As Control = CType(Activator.CreateInstance(t), Control)
parent.Controls.Add(c)
29 What is the (DynamicProperties) item listed on a
control's property page in VS.NET?
Clicking Advanced... under this DynamicProperties option in
the control properties displays certain control properties that can be set
through an XML app.config file that is added to your project. This file
stores the dynamic property values and is automatically read during the
intialization process on the form at design time. You can manually edit this
file to change the properties and next when you run the application,
controls will pick up the new values. This file is used strictly for design
time initializations.
30 How can I make a Panel or Label semi-transparent on
a Windows Form?
You can make a panel or label transparent by specifying the alpha value for
the Background color.
panel.BackColor =
Color.FromArgb(65, 204, 212, 230);
In the designer you have to enter these values manually in the edit box.
Don't select the color using the ColorPicker.
31 How can I add a control to a Window Form at runtime?
To add a control at runtime, you do three steps:
1. Create the control
2. Set control properties
3. Add the control to the Form's Controls collection
In general, if you need help on exactly what code you need to add, just look
at the code generated by the designer when you add the control at design
time. You can generally use the same code at runtime.
Here are code snippets that create a textBox at runtime.
[C#]
//step 1
TextBox tb = new TextBox();
//step2
tb.Location = new Point( 10, 10);
tb.Size = new Size(100, 20);
tb.Text = "I was created at runtime";
//step3
this.Controls.Add(tb);
[VB.NET]
'step 1
Dim tb as TextBox = New TextBox()
'step2
tb.Location = New Point( 10, 10)
tb.Size = New Size(100, 20)
tb.Text = "I was created at runtime"
'step3
Me.Controls.Add(tb)
32 How do I make the arrow keys be accepted by a
control (such as a button) and not handled automatically by the framework's
focus management?
By default, the arrow keys are not handled by a control's key processing
code, but instead are filtered out for focus management. Hence, the
control's KeyDown, KeyUp and KeyPressed events are not hit when you press an
arrow. If you want your control to handle these keyboard events, you tell
the framework by overriding your control's IsInputKey method.
protected override bool
IsInputKey(Keys key)
{
switch(key)
{
case Keys.Up:
case Keys.Down:
case Keys.Right:
case Keys.Left:
return true;
}
return base.IsInputKey(key);
}
33 In the property browser for a custom control, how do
I disable a property initially, but enable it later based on some other
property changing?
Implement ICustomTypeDescriptor, and provide your own
PropertyDescriptor for that property that changes it's return value
for IsReadOnly.
34 How can I have the control designer create the
custom editor by calling the constructor with the additional parameters
rather than the default constructor?
You can do this by creating the editor yourself rather than allowing
TypeDescriptor to do it:
1) Shadow the property you care about in your designer...
protected override void
PreFilterProperties(IDictionaryProperties props)
{
PropertyDescriptor basePD = props["MyProperty"];
props["MyProperty"] = new EditorPropertyDescriptor(basePD);
}
2) Create a property descriptor that "wraps" the original descriptor
private class
EditorPropertyDescriptor : PropertyDescriptor
{
private PropertyDescriptor basePD;
public EditorPropertyDescriptor(PropertyDescriptor base)
{
this.basePD = base;
}
// now, for each property and method, just delegate to the base...
public override TypeConverter Converter
{
get { return basePD.Converter; }
}
public override bool CanResetValue(object comp)
{
return basePD.CanResetValue(comp);
}
// and finally, implement GetEditor to create your special one...
3) create your editor by hand when it's asked for
public override object
GetEditor(Type editorBaseType)
{
if (editorBaseType == typeof(UITypeEditor))
{
return new MyEditor(Param1, param2, param3);
}
return basePD.GetEditor(editorBaseType);
}
}
(from sburke_online@microsoft..nospam..com on
microsoft.public.dotnet.framework.windowsforms)
|