Jag får inte till det med propertygridden i visual studio och usercontrol. Benni, Andreas. Benni, Hej, så rätt så, jag såg att jag var fel ute, och därför så ändrade jag. Benni, När jag kolla mot din så ser jag ingen större skillnad. Menar du att när du sedan lägger in det i ett Benni, Hej och tack för att du brör dig. Benni, OCHHHHHHHHHHHHHHHHHHHHH Benni, Benni,Um usercontrol ochpropertygridden i visual studio
Vad jag skulle vilja ha är att i propertygridden i visual studio så skulle det dycka upp
"Horison_Verticalt" med en lista(ung som vid AllowDrop).
Där ville jag ha med:
Horizont
Verticalt
Just nu så försöker jag att bara få med dem i propertygridden
<code>
private Line_Styles m_Style = Line_Styles.Horizont;
[Description("3d line")]
public enum Line_Styles
{
Horizont,
Verticalt
}
[Description( "DrawLine style")]
[Category( "DrawLine style" )]
public Line_Styles Style
{
get
{
return m_Style;
}
set
{
m_Style = value;
Invalidate();
}
}
</code>
Någonting gör jag (som vanligt)fel, jag får inte ens upp det i propertygridden .
Några tips?Sv: Um usercontrol ochpropertygridden i visual studio
Blir inte riktigt klok på vad det är du vill göra. Ska du ha två olika property av typen string, eller vill du ha ett property där man kan välja mellan värdena <b>Horizont</b> och <b>Verticalt</b>? För att du överhuvudtaget ska kunna få något att synas i propertygriddenså måste din klass ärva från minst <b>Component</b> eller någon av dess subklasser.
Följande kod visar ett exempel på båda sakerna - du får läsa på om attributet
using System;
using System.ComponentModel;
public class MyComponent : Component
{
private string name;
private BorderStyle borderStyle;
public MyComponent()
{
}
[
Browsable(true),
Category("Appearance"),
Description("The border style."),
DefaultValue(BorderStyle.None)
]
public BorderStyle BorderStyle
{
get { return borderStyle; }
set
{
if( this.borderStyle != value )
{
// Det är alltid en bra idé att kolla att variabler av typen
// enum tilldelas ett giltigt värde för just det enum:t
if( !Enum.IsDefined(typeof(BorderStyle), value) )
throw new InvalidEnumArgumentException("value", (int)value, typeof(BorderStyle));
this.borderStyle = value;
this.Invalidate();
}
}
}
[
Browsable(true),
Category("Data"),
DefaultValue(typeof(string), ""),
Description("The name of the component.")
]
public int Name
{
get { return this.name; }
set
{
// Kontrollera så att man inte matar in ett nullvärde som namn.
if( value == null )
throw new ArgumentNullException("Name");
this.name= value;
this.Invalidate();
}
}
}
Nu har du lite att gå på. Jag rekommonderar dig att läsa på om de olika attributen också som jag använder i mitt exempel. Om du vill ha mer komplicerade typer som du kan "öppna" i property gridden genom att klicka på ett [+] så blir det lite svårare. Dessa implementerar man oftast i en egen klass, samt att man får implementera en type converter - en klass som ärver från <b>ExpandableObjectConverter</b>, samt lägga till attributet <b>TypeConverter</b> på din klass för att informera gridden vilken converten den skall använda för ett hämta & spara typen. Man använder även attributet <b>DesignerSerializationVisibility</b> för att beskriva hur det skall sparas i kod.
Som sagt lite svårare - jag kanske skriver ihop en artikel eller två om sånna här saker snart. :-D
Sv:Um usercontrol ochpropertygridden i visual studio
Om jag har läst??? Jodå, men jag får det ändå inte som jag vill.
Du skall ha tack för ditt exempel, men det är ju inte excakt som jag försöker.
Detta fungera:
<code>
public class DrawLine : System.Windows.Forms.UserControl
{
private Color m_color1 = Color.DarkGray; // first color
private Color m_color2 = Color.White; // second color
public Color lineColor1
{
get { return m_color1; }
set { m_color1 = value; Invalidate(); }
}
public Color lineColor2
{
get { return m_color2; }
set { m_color2 = value; Invalidate(); }
}
</code>
Inga problem. Sen hittade jag hur man skulle få till en enum:
och den skulle tydligen ligga direkt efter namespace, alltså inte i classen.
<code>
public enum Line_Styles
{
Horizont,
Verticalt
}
</code>
Sen inne i classen:
<code>
public class DrawLine : System.Windows.Forms.UserControl
{
private Styles m_Style = Line_Styles.Horizont;
</code>
Därefter
<code>
[Description( "3d line")]
[Category( "Appearance" )]
public Styles Style
{
get
{
return m_Style;
}
set
{
m_Style = value;
Invalidate();
}
}
</code>
Detta är väll inte två olika typer av string eller??
Vad jag tänker göra är, att jag saknar line-verktyget ifrån VB, därför så ville jag göra ett eget. Jag har fixat all ritning(drawing), så det är ju bara att "spika" ihop det.
Jag har ängnat större delen av julnatten plus idag för att kolla olika källor(internet) och jag tycker nog att jag skriver som dom, men jag får inte fram vad jag vill i alla fall.Sv: Um usercontrol ochpropertygridden i visual studio
Vad är det som blir fel då? Och i ärlighetensnamn så uppdaterade du ditt första inlägg med nykod för det var inte den koden som visades innan när jag svarade =)Sv:Um usercontrol ochpropertygridden i visual studio
Jag får inga felmedelanden, men jag för inte in det i properties.
Tycker du att det ser rätt ut?
Jag kommer att behöva att göra ytterligare liknande, men det är meningslöst när jag inte får
den första att fungera.Sv: Um usercontrol ochpropertygridden i visual studio
Allt ser rätt ut - här har du ett fungerande exempel på en kontroll med ett enum-baserat propertysom jag skev och testade nyss
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
namespace PropertyGridExample
{
public enum MyStyle
{
Left = 1,
Right = 2
}
public class MyComponent : System.Windows.Forms.UserControl
{
private MyStyle _style = MyStyle.Left;
private System.ComponentModel.Container components = null;
public MyComponent()
{
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
public MyStyle Style
{
get { return this._style; }
set { this._style = value; }
}
#region Component Designer generated code
private void InitializeComponent()
{
this.Name = "MyComponent";
this.Size = new System.Drawing.Size(224, 112);
}
#endregion
}
}
Testa och säga hur det funkar. Propertn <b>Style</b> borde dyka upp längst ner i property gridden om du har markerat kontrollen. Men om allt du vill göra är att rita räta linjer av en viss färg så varför inte bara skapa en helt tomuser kontroll och använda dess <b>BackColor</b> property för att ange färgen på linjen, sen använder du <b>Width</b> och <b>Height</b> för att ange linjens tjocklek? :-D
Sv:Um usercontrol ochpropertygridden i visual studio
project, så kan du se i properties "MyStyle"?
Om du kan de, då är det dags för mig att lägga av :-(Sv: Um usercontrol ochpropertygridden i visual studio
Jag vet inte riktigt vad du gör, eller var du gör fel eftersom du är så blyg med information om vad som händer eller inte händer när du gör vad. Vad du måste gör (enklat) för att testa det är att skapa ett nytt winform (Windows Application) projekt. Lägg till en ny User Control och klippp in min kod i den. Sen går du ut i designen för ditt formulär (inte kontrollen utan fönstret) och i din <b>Toolbox</b> väljer du gruppen <b>My User Controls</b>.
Där kommer du hitta <b>MyComponent</b> som du lägger till på ditt formulär. Sen ser du till att du har markerat kontrollen som du nyss drog ut på ditt formulär och tittar i din Property Grid där du längst ner (troligen efter som jag inte angett någon kategori för den) så hittar du ett property som heter <b>Style</b> (inte <b>MyStyles</b> eftersom det är datatypen för propertyt, som i detta fallet är ett enum med värdena <b>Left</b> och <b>Right</b>).
Fungerar inte detta så är det antingen något fel på ditt Visual Studio och du får installera om det, eller så gör du inte exakt som jag säger varpå du måste beskrva vilken sekvens av saker som du gör så att vi kan lokalisera vad det blir fel.
Lycka till! :-DSv:Um usercontrol ochpropertygridden i visual studio
Jag har gjort exact som du har beskrivit, och naturligtvis så fungerade diit program GRRRRRRRRRRRRR.
Jag får se hur jag skall göra med mitt.Sv: Um usercontrol ochpropertygridden i visual studio
Klipp in hela koden för din User Control så ska vi ta oss en titt.Sv:Um usercontrol ochpropertygridden i visual studio
NUUUUUUUUUUUUUUUUUUUUUUU
FUNGERADEEEEEEEEEEEEEEEEEEEEEE
MIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIT
Ursäkta att jag skriker, men jag har ju suttit i snart ett dygn.
Tusen tack för att du inte gav upp.Sv: Um usercontrol ochpropertygridden i visual studio
Toppen! Grattis till framgången! Får man fråga vad det var som spökade eller var det bara en sån situation där helt plötsligt fungerande utan att man ändrat på något speciellt ? =)Sv:Um usercontrol ochpropertygridden i visual studio
Som "tack" för mitt deltagande i ditt problem så skall jag kräva en motprestantion från din sida. Detta gör jag i egenskap av Moderator här på pellesoft. Vad jag skulle vilja att du gör är att du går igenom <b>alla</b> dina tidigare inlägg och markerar dem enligt deras nuvarande status.
Detta gör du enklast genom att gå in under <b>Forum</b> här på Pellesoft och överst där ser du en lista på alla dina öppna trådar. Markera trådar som <b>Löst</b> om de innehåller fråga + ett svar som du är nöjd med, samt som <b>Stängd</b> om du har startar en tråd som du inte fick något svar som du var nöjd med men har slutat att övervaka den tråden.
Dessa små saker gör det väldigt mycket enklare för andra besökare, både de som letar efter svar själv men även de som hjälper till att svara på frågor, genom att de enkelt kan se statusen på tråden. Du hjälper även de som svarat i din tråd med att förbättra sin statistik då deras "medverkar i lösta trådar" räknare ökar.
God jul på dig :-D