Jump to content
Xtreme .Net Talk

Recommended Posts

  • *Experts*
Posted

OK, I'm developing a component in VB.NET to simplify menus with

bitmaps. It implements the IExtenderProvider interface and adds

an 'ImageIndex' property to every MenuItem on the form. The goal

is to ownerdraw every menuitem on the form with just dropping this

component on the form.

 

However, I've hit a snag. I don't know where to do the OwnerDrawing.

If I put it in the CanExtend function (Implemented from IExtenderProvider;

the function checks to see if a specific control should be extended

with a new property), it actually changes the OwnerDraw property

at design time (i.e. actually, sets OwnerDraw = True in the property

window and underlying form code). If I set it in the SetImageIndex

method (it is called every time the ImageIndex extended property

is changed to set up the appropriate values), it also changes it

at design time.

 

My question is this: where should I put the appropriate OwnerDraw = True

and AddHandlers in the component so that it OwnerDraws every

MenuItem on the form that it's contained on, but at run time only.

 

If possible, I'd like to do it with as little code on the form as possible

(I'm trying to concentrate all the the code in this component).

  • *Gurus*
Posted

Ok, after doing a little research on the matter I have a couple of ideas.

 

You should hook up the events in the SetImageIndex function. Every Component has a protected DesignMode property so you can see whether or not to change the properties based on that.

 

As far as making sure you've hooked up events for *every* menu item, I'm a little stumped as to the best way to do this. My best idea as the moment is, whenever a call is made to SetImageIndex, you hook up the Popup event of the parent menu (if you haven't already done so). Now, when that event fires, you loop through all child menus, and if you haven't set their OwnerDraw properties, do so then.

 

I'm sure there must be a better way to do this but haven't found one in the limited time I've been able to devote to this. The MainMenu class offered a promising GetForm() method, which unfortunately returns null at that stage. If it didn't, one could hook the Load event of the Form, to find all menus and ownerdraw them.

 

If you find a better way, be sure to post it!

MVP, Visual Developer - .NET

 

Now you see why evil will always triumph - because good is dumb.

 

My free .NET Windows Forms Controls and Articles

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...