Multimobile Development: Building Applications for any Smartphone
System.ComponentModel.Design.ArrayEditor - How to
Messages   Related Types
This message was discovered on microsoft.public.dotnet.framework.aspnet.buildingcontrols.
Responses highlighted in red are from those people who are likely to be able to contribute good, authoratitive information to this discussion. They include Microsoft employees, MVP's and others who IMHO contribute well to these kinds of discussions.

Peter Ehli (VIP)
I have a custom control which is a set of tab images like in hotmail. In my control I have a hard coded array that sets the string
value of the tabs.

private String[] tabCaptions = { "Home", "Tab 1", "Tab 2", "Tab 3" };

I would like these tab captions set by the user of my control via the properties window. i.e. the code below that I have so far.

using System;
using System.ComponentModel.Design;

namespace NetParadigm.WebServerControls
{
public class TabEditor : ArrayEditor
{
public TabEditor() : base (typeof ( String ) )
{
}
}
}

Then I specify this editor via the editor attribute for my TabCaptions property as below

private String[] tabCaptions;

[EditorAttribute("TabEditor",typeof(System.Drawing.Design.UITypeEditor))]
public String[] TabCaptions
{
get
{
return tabCaptions;
}
set
{
tabCaptions = value;
}
}

This is just stubbed code and as far as I could get. This gives me an editor (i.e. click on the ellipse) window exactly like a
windows forms textbox when you set the Lines property values.

When these string values are set via this edior when my control is on a aspx page I get the below in Html view for the control

<cc1:NP_TabStrip id=NP_TabStrip1 runat="server" TabCaptions="String[] Array">

Of course I need to persist these values via view state and TabCaptions="String[] Array" bombs big time!

I've searched everywhere for an example of how to set a string array in my control and come up with a lot of fragments and unrelated
stuff. The Kothari book has an example of a CollectionEditor that is way too complex to disseminate for my use. Any ideas or a good
example of how to do this would be greatly appreciated. Thanks in advance.

Peter Ehli

Reply to this message...
Vote that this is a GOOD answer...
 
 
    
ChrisAdams (VIP)
You need to change the default serialization behaviour that the designer uses
by
adding attributes to the property.

[DesignerSerializationVisibility( DesignerSerializationVisibility.Content ),
PersistenceMode( PersistenceMode.Attribute )]

This should force the dte to serialize the content of your property ie the
string values, instead of the property itself, ie an array.

Chris
Reply to this message...
Vote that this is a GOOD answer...
 
 
    
Peter Ehli (VIP)
Hi Chris,
My property attributes are below and as you can see I added the DesignerSerializationVisibility and PersistenceMode attribute to my
property as you suggested.

[EditorAttribute( "TabEditor",typeof( System.Drawing.Design.UITypeEditor )),
DesignerSerializationVisibility( DesignerSerializationVisibility.Content ),
PersistenceMode( PersistenceMode.Attribute )]
public String[] TabCaptions
{
get
{
return tabCaptions;
}
set
{
tabCaptions = value;
}
}

private String[] tabCaptions;

When I set the string values i.e. TabCaptons via the editor for my control on an aspx page I get the below in Html view from the
aspx page.

<cc1:NP_TabStrip id=NP_TabStrip1 runat="server" TabCaptions-Rank="1" TabCaptions-IsReadOnly="False"
TabCaptions-SyncRoot="System.String[]" TabCaptions-IsSynchronized="False" TabCaptions-IsFixedSize="True" TabCaptions-Length="4"
TabCaptions-LongLength="4" TabCaptions="String[] Array">

This gives me a parser error below when trying to render the page in the browser

Parser Error Message: Cannot create an object of type 'System.String[]' from its string representation 'String[] Array' for the
'TabCaptions' property.

Again below is my designer class.

using System;
using System.ComponentModel.Design;

namespace NetParadigm.WebServerControls
{
public class TabEditor : ArrayEditor
{
public TabEditor() : base (typeof ( String ) )
{
}
}
}

Any ideas on whats wrong? Thanks Chris!

<nospam="Click here to reveal e-mail address"/><nospam>

"ChrisAdams" <Click here to reveal e-mail address> wrote in message news:Click here to reveal e-mail address...
[Original message clipped]

Reply to this message...
Vote that this is a GOOD answer...
 
 
    
ChrisAdams (VIP)
Whoops,

I forgot that it only works for properties that expose a collection object,
and you need to
persist it as an inner property.

What you probably need to do is specify the TypeConverter that should be
used to get
it from an array to a string representation. Take a look at ArrayConverter
and the
attribute you need to apply is.

[TypeConverter( typeof( System.ComponentModel.ArrayConverter) )]

Chris.
Reply to this message...
Vote that this is a GOOD answer...
 
 
    
Peter Ehli (VIP)
Thanks Chris, I believe my next step is to work through chapter 10 and the examples of the Kothari book. This chapter explains
typeconveters, inner
property persistence, and designer serialization and so forth. Again many thanks for pointing me in the right direction.

Peter Ehli

"ChrisAdams" <Click here to reveal e-mail address> wrote in message news:Click here to reveal e-mail address...
[Original message clipped]

Reply to this message...
Vote that this is a GOOD answer...
 
 
    
Guillermo Kowaljow
Hi, i've been working in a server control and i have a problem very much like the one you have, but the problem i have is the next:

Cannot create an object of type 'System.String[]' from its string representation 'Matriz String[]' for the 'Idiomas' property.

Has you can see, it said Matriz String[] and not Array String as yours.

I wanna ask if you know if it?s the same problem or not, and if you already resolved your problem and how did you do it??

thanks

--------------------------------
From: Guillermo Kowaljow
Reply to this message...
Vote that this is a GOOD answer...
 
 
 
System.ComponentModel.ArrayConverter
System.ComponentModel.Design.ArrayEditor
System.ComponentModel.Design.CollectionEditor
System.ComponentModel.DesignerSerializationVisibility
System.ComponentModel.EditorAttribute
System.ComponentModel.TypeConverter
System.Drawing.Design.UITypeEditor
System.String
System.Web.UI.PersistenceMode




Multimobile Development: Building Applications for any Smartphone
Ad
BootFX
Reliable and powerful .NET application framework.
iOS, Android and Windows Phone Development Training and Consultancy
Hosted by RackSRV Communications
 
Multimobile Development: Building Applications for any Smartphone
Copyright © AMX Software Ltd 2008-2010. Portions copyright © Matthew Baxter-Reynolds 2001-2010. All rights reserved.
Contact Us - Terms of Use - Privacy Policy - 4.0.30129.1734