StrataFrame Forum

Subclassing a control

http://forum.strataframe.net/Topic29816.aspx

By Ger Cannoll - 3/30/2011

I want to subclass a control , but get the functionality from two parent classes, and am not sure whats the best way to go about this. Scenario is as follows:

I have a MyTextBox which suclasses the SF textBox and adds in some funtionality like for instance highlighting the textBox if it has focus, so that it stands out. This is working fine.

Now I want to start using a 'MyTextBoxNumeric' text Box , which will be SubClassing the DeveExpress Sf Wrapped textEdit box, but I also want the funtiionality that is in MYTExtBox above.

Now in Dot net (as far as I am aware) I cannot subClass from two different classes, so am wondering whats the best way to do this, without copying and pasting too much code
By Charles R Hankey - 3/30/2011

I subclass the SF Devex control so as to have a textbox formatted for currency, one for integers, and one for text.  This will give you the idea. (don't remember why one has a resx file - probably unnecessary, but you just need to see the code anyway)

I can't see to get the forum html to put my code on separate lines so I will just zip and attach my three classes.


I have these in their own project and then use that project in all my SF VB apps. 

As you probably know, you can go to the code behind page of your window and do a global replace for the type for textboxes, so it is a simple matter to convert a window to your new Devex controls. 

Let me know how it works for you. 
By Ger Cannoll - 3/30/2011

Hi Charles. Many tahnks for replying.

I will down load and have a look.
By Ger Cannoll - 3/31/2011

Trying to subclass the NF.SF.UI.Windows.Forms.Devex.textedit control and include same functionality as I had when I subclassed the SF TextBox. My original Class as follows:

public class Textbox : MicroFour.StrataFrame.UI.Windows.Forms.Textbox
{
private System.Drawing.Color originalBackgroudColour;
protected override void OnEnter(EventArgs e)
{
//-- Run Base Class Code
base.OnEnter(e);
//-- Save away original background color
this.originalBackgroudColour = this.BackColor;
 
//-- Set fields to be the maximum length of the database fields
//-- For Memo (VarChar(Max) check for Mutiline..assumes Multiline is on for VarChar(Max) though
if (this.BusinessObject == null || this.Multiline == true )
{
this.AutoAdjustMaxLength = false;
}
else
{
this.AutoAdjustMaxLength = true;
}
//-- Define the background color for the control.. maybe extend this to use a property later
this.BackColor = Color.Aqua;
}
protected override void OnLeave(EventArgs e)
{
//-- Run the Base Code for the textbox
base.OnLeave(e);
//-- Reset back color to the default
this.BackColor = this.originalBackgroudColour;
}
} // End textBox




Now when I try t replicate this , with the TextEdit, some of the properties and events dont seem to be there e.g. base.OnEnter   this.backColor      this.AutoAdjustMaxLength  base.OnLeave

I was expecting these to be the same , is the TextEdit not a subClass somewhere along the line of the SF textBox ?

(Charles, I had a look at your code but having a bit of difficulty transalting VB to c#)

 
By Ger Cannoll - 3/31/2011

It appeared I did not have some of the DEv Express references included. I included these and can now see the this.backColor  base.OnLeave property and events etc so I can include the original SubClass functionality.

However, still cant see this.AutoAdjustMaxLength property. I need this to automatically set all controls (All textBoxes) to MaxLength



 
By Ger Cannoll - 4/4/2011

I've seen how to do this from another thread....need to copy code from SF source and replicate... amny thanks for all help given