Laden...

ObjectView

Erstellt von TheBrainiac vor 16 Jahren Letzter Beitrag vor 16 Jahren 4.859 Views
TheBrainiac Themenstarter:in
795 Beiträge seit 2006
vor 16 Jahren
ObjectView

Beschreibung:

ObjectView ist eine Komponente, mit der man selbstgeschriebene Klassen, die nichts mit dem UserInterface zu tun haben (müssen), grafisch darzustellen und deren Funktionen offen zu legen.

Zuerst einmal, wie ich darauf gekommen bin, diese Komponente zu schreiben:

Ich finde es doof, dass man für jede Klasse, die man verwendet und auch grafisch darstellen will, entweder ein eigenes UserControl, ganz viele Labels und Textboxen oder ein Windows-Control verwenden muss. Grundsätzlich habe ich zwar nichts gegen diese Windows-Controls, aber der Umgang damit ist manchmal sehr umständlich und schwierig. Also hab ich mir gedacht, ich schreibe einfach mal ein eigenes Control.

Weiteres im nächsten Beitrag!

Schlagwörter: ObjectView, View, Object, Extended ListView

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
TheBrainiac Themenstarter:in
795 Beiträge seit 2006
vor 16 Jahren

Zur Verwendung:

1.: Eine Klasse schreiben

Hier einfach eine Kunden-Klasse mit den Eigenschaften Name und Alter.


public class Client
{
    public Client()
    {
        name = "";
        age = 0;
    }

    public Client(String name, Int32 age)
    {
        this.name = name;
        this.age = age;
    }

    private Int32 age;

    public Int32 Age
    {
        get
        {
            return age;
        }
        set
        {
            age = value;
        }
    }

    private String name;

    public String Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }
}

2.: Von ObjectViewObject erben

Durch das Erben von ObjectViewObject fällt die Eigneschaft "Name" weg, da diese schon in ObjectViewObject implementiert ist.

public class Client : ObjectViewObject

3.: Funktionen hinzufügen

Hinzugefügt werden die Funktionen "Name Ändern", "Alter Ändern" und "Löschen".
Die Klasse Request ist bei meinem Projekt dabei,
OnPropertyChanged muss ausgelöst werden, um das ObjectViewItem zu updaten.

public void ChangeMyName()
{
    Request rqst = new Request();
    rqst.Text = "Please enter the new name!";
    rqst.LabelText = "New name:";
    rqst.OldValue = Name;
    rqst.ShowDialog();
    Name = rqst.Value;
    OnPropertyChanged();
}

public void ChangeMyAge()
{
    Request rqst = new Request();
    rqst.Text = "Please enter the new age!";
    rqst.LabelText = "New age:";
    rqst.OldValue = age.ToString();
    rqst.ShowDialog();
    Int32.TryParse(rqst.Value, out age);
    OnPropertyChanged();
}

public void DeleteMe()
{
    Parent.Remove(this);
}

4.: Attribute hinzufügen

Um die Icons und so weiter zur Klasse hinzuzufügen, fügt man folgende Attribute zur Klasse hinzu:

[Image(@"Images\Client.png")]
[TypeName("Client")]
public class Client : ObjectViewObject
{ ....

Nun muss man sich entschieden, welche Eigenschaften und Methoden angezeigt werden sollen. Diese kennzeichnet man mit dem Visible-Attribut:

[Visible(true)]
public Int32 Age
{ ... }

[Visible(true)]
public void ChangeMyName()
{ ... }

[Visible(true)]
public void ChangeMyAge()
{ ... }

[Visible(true)]
public void DeleteMe()
{ ... }

Jetzt werden die Eigenschaften und Methoden schon angezeigt, allerdings nur mit ihrem richtigen Namen (z.B. "ChangeMyName") und ohne Icon.

Das kommt jetzt:

[Visible(true)]
[Image(@"Images\Date.png")]
[DisplayName("Age")]
public Int32 Age
{ ... }

[Visible(true)]
[Image(@"Images\EditUser.png")]
[DisplayName("Change the name of this client")]
public void ChangeMyName()
{ ... }

[Visible(true)]
[Image(@"Images\EditDate.png")]
[DisplayName("Change the age of this client")]
public void ChangeMyAge()
{ ... }

[Visible(true)]
[Image(@"Images\Delete.png")]
[DisplayName("Delete this client")]
public void DeleteMe()
{ ... }

5.: Fertig!

Die Klasse sollte jetzt so aussehen:

namespace Tester
{
    [Image(@"Images\Client.png")]
    [TypeName("Client")]
    public class Client : ObjectViewObject
    {
        private Int32 age;

        public Client()
        {
            Name = "";
            age = 0;
        }

        public Client(String name, Int32 age)
        {
            Name = name;
            this.age = age;
        }

        [Visible(true)]
        [Image(@"Images\Date.png")]
        [DisplayName("Age")]
        public Int32 Age
        {
            get
            {
                return age;
            }
            set
            {
                age = value;
            }
        }

        [Visible(true)]
        [Image(@"Images\EditUser.png")]
        [DisplayName("Change the name of this client")]
        public void ChangeMyName()
        {
            Request rqst = new Request();
            rqst.Text = "Please enter the new name!";
            rqst.LabelText = "New name:";
            rqst.OldValue = Name;
            rqst.ShowDialog();
            Name = rqst.Value;
            OnPropertyChanged();
        }

        [Visible(true)]
        [Image(@"Images\EditDate.png")]
        [DisplayName("Change the age of this client")]
        public void ChangeMyAge()
        {
            Request rqst = new Request();
            rqst.Text = "Please enter the new age!";
            rqst.LabelText = "New age:";
            rqst.OldValue = age.ToString();
            rqst.ShowDialog();
            Int32.TryParse(rqst.Value, out age);
            OnPropertyChanged();
        }

        [Visible(true)]
        [Image(@"Images\Delete.png")]
        [DisplayName("Delete this client")]
        public void DeleteMe()
        {
            Parent.Remove(this);
        }
    }
}

Weiteres im nächsten Beitrag!

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
TheBrainiac Themenstarter:in
795 Beiträge seit 2006
vor 16 Jahren

Nun kommt endlich der Code!

Über eure Rückmeldungen, gefundene Bugs, Verwendungsberichte, etc. würde ich mich freuen!

P.S.: Sofern ihr diese Komponente kommerziell nutzen wollt, bitte ich um Rücksprache (developer [at] brainiac-tools [dot] de). In Freeware darf die Komponente ohne Rücksprache verwendet werden, jedoch fände ich es gut, in den Credits erwähnt zu werden.

Weiterhin ist noch geplant:*Unterstützung von anderen (nicht von ObjectViewObject abgeleitete) Klassen durch "StyleSheets" *Verbesserung der OnPaint-Methode

Gruß, Christian.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`