Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   C# C# und eigene Komponenten (https://www.delphipraxis.net/63987-c-und-eigene-komponenten.html)

Pseudemys Nelsoni 25. Feb 2006 19:26


C# und eigene Komponenten
 
Moin,

kann ich in C# eigene Komponenten schreiben, so dass ich im OI Eigenschaften/Ereignisse bearbeiten kann? Wäre ein wenig umständlich, wenn ich eine Klasse schreibe und ich die Events jedes Objekts per hand schreiben müsste

Elvis 25. Feb 2006 19:49

Re: C# und eigene Komponenten
 
Ich nehme mal an, du benutzt C#X?
Dann einfach deinem Projekt eine Komponente hinzufügen, falls du auch innerhalb der Komponente einen Designer haben willst.
Wenn du bereits eine Klasse hast, musst du nur ICmponent implementieren.

Willst du Properties der fertigen Komponente später direkt im Designer an controls binden: Implmenetiere einfach IListSoure.
Eine kleine Liste von solchen Interfaces findest du in meinem Beitrag in der ".Net Diskussion". Die .Net Docs sollten sie dir eigentlich alle erklären können. ;)

Christian S. 25. Feb 2006 19:53

Re: C# und eigene Komponenten
 
Hallo!

Einfach eine neue Steuerelement-Bibliothek anlegen, darin findest Du dann schon ein neues "UserControl", also Deine Komponente. Die verfügt bereits über Standard-Properties und -Ereignisse. Prinzipiell werden dabei alle Properties im OI angezeigt, möchtest Du das bei einer Property nicht, verpasst Du Ihr das Attribut "[Browsable(false)]". Ereignisse fügst Du ein, indem Du einfach ein "public event MyDelegate foo" in deine Klasse einbaust ;-)

Grüße
Christian

P.S.: Obiges Wissen bezieht sich auf .NET 2.0, weiß nicht ob es bei .NET 1.1 auch schon so war.

Pseudemys Nelsoni 25. Feb 2006 19:56

Re: C# und eigene Komponenten
 
Moin Elvis,

danke für Deine Antwort. Also z.Z benutze ich noch die Konsolen-Version (csc.exe des 2.0 Frameworks).
Nun wollte ich eine Komponente schreiben(Im Notepad) bis ich mir mal eine passende IDE zugelegt habe - Borland C# Builder wird es nicht sein. Eine Komponente in Delphi zuschreiben war ja easy, diese brauchte man ja nur per Register-Prozedur registrieren. Wie das bei C# ist, weiss ich nicht.

Ich muss zugeben, ich habe nur Bahnhof verstanden, wie meintest Du das mit "ICmponent implementieren" ? *g*

Edit:

@Christian, ich schau mal nach, besten Dank :)... Wenn ich Probleme habe, editier ich hier nochmal ^^

Elvis 25. Feb 2006 20:11

Re: C# und eigene Komponenten
 
Kiek mal hier: http://msdn.microsoft.com/vstudio/ex...p/default.aspx
Kein Grund für Notepad ;)
Zitat:

Zitat von Pseudemys Nelsoni
Ich muss zugeben, ich habe nur Bahnhof verstanden, wie meintest Du das mit "ICmponent implementieren" ? *g*

IComponent ist ein Interface, welches bewirkt, dass du eine Klassse auf den Designer ziehen kannst. ;)

Pseudemys Nelsoni 26. Feb 2006 12:13

Re: C# und eigene Komponenten
 
@Elvis: Perfekt, genau sowas habe ich gesucht! Wusste gar nicht, dass es bei Microsoft auch was kostenlos gibt *g*

Das mit IComponent habe ich immernoch nicht begriffen :oops: Gibt es dafür ein Beispiel?

@Christian: Wie lege ich eine "Steuerelement-Bibliothek" an? Geht das in MSVC#2005EE ?

Christian S. 26. Feb 2006 12:18

Re: C# und eigene Komponenten
 
Hi!

Zitat:

Zitat von Pseudemys Nelsoni
@Christian: Wie lege ich eine "Steuerelement-Bibliothek" an? Geht das in MSVC#2005EE ?

Gehe ich mal von aus. Ich beschreibe mal, wie es in meiner Prof. geht (leider nur auf englisch):

File -> New -> Project
Im Baum links unter "Visual C#" den Eintrag "Windows" wählen und dann rechts "Windows Control Library"
Noch die Verzeichnisse unten anpassen, wie Du es haben willst
-> Fertig

Grüße
Christian

Pseudemys Nelsoni 26. Feb 2006 12:34

Re: C# und eigene Komponenten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin Christian,

wenn ich auf "New Project" gehe, habe ich dort nur [siehe Anhang] zur Wahl.

Fürchte da ist nichts bei oder?

Danke btw.

Christian S. 26. Feb 2006 12:48

Re: C# und eigene Komponenten
 
Hm. Komisch. Dann erstell dort mal 'ne Class Library und füge dann ein UserControl ein. Sollte es auch tun. Einfügen des UserControl:

Nachdem Du die Class Library erstellt hast, im Solution Explorer Rechtsklick auf die Library und im Kontextmenü Add->UserControl. Falls es das nicht gibt, nimm Add->NewItem und schau, was angeboten wird ;-)

Pseudemys Nelsoni 26. Feb 2006 12:55

Re: C# und eigene Komponenten
 
Hat alles soweit geklappt wie Du gesagt hast - Danke. Ist es richtig, dass ich da nun so eine Art leere Form habe? Für eine nichtvisuele Komponente die ich schreiben möchte?

Elvis 26. Feb 2006 12:56

Re: C# und eigene Komponenten
 
Zitat:

Zitat von Christian S.
Hm. Komisch. Dann erstell dort mal 'ne Class Library und füge dann ein UserControl ein. Sollte es auch tun.

Er will kein UserControl, er will eine Komponente. ;)
@Pseudo:
UserControl == TFrame
Component == TComponent

Zu IComponent können wir auch noch später kommen.
Mache dir einfach eins klar: Du bist ein noob! :P Aber weißt du was? Ich bin auch einer, genau wie Christian und eigentlich jeder andere .Net Dev auf dem Planeten.

Ich installiere gerade C#X, sollte also bei der nächten Frage wisen was bei dir geht und was nicht. ;)

Christian S. 26. Feb 2006 13:06

Re: C# und eigene Komponenten
 
Zitat:

Zitat von Elvis
Zitat:

Zitat von Christian S.
Hm. Komisch. Dann erstell dort mal 'ne Class Library und füge dann ein UserControl ein. Sollte es auch tun.

Er will kein UserControl, er will eine Komponente. ;)

:wall:

Die habe ich noch nie erstellt, habe immer UserControl verwendet, weil man da hübscher "zusammenbauen" kann ;-)
Aber es reicht wahrscheinlich, statt Add->UserControl auf Add->Component zu klicken :zwinker:

//edit :autsch: --> :wall:

Pseudemys Nelsoni 26. Feb 2006 13:38

Re: C# und eigene Komponenten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin again :???:

Zitat:

@Pseudo:
UserControl == TFrame
Component == TComponent
"Component" finde ich nicht :? *g* [Siehe Anhang]

Zitat:

Zu IComponent können wir auch noch später kommen.
Gern :thumb: :mrgreen:

Zitat:

Mache dir einfach eins klar: Du bist ein noob! Aber weißt du was? Ich bin auch einer, genau wie Christian und eigentlich jeder andere .Net Dev auf dem Planeten.
Da hast Du Christian aber nett reingerissen *ggg*

Zitat:

Ich installiere gerade C#X, sollte also bei der nächten Frage wisen was bei dir geht und was nicht.
Perfekt, dazu wirst Du bei mir genug Gelegenheit haben :mrgreen:

Zitat:

Aber es reicht wahrscheinlich, statt Add->UserControl auf Add->Component zu klicken
Hi Christian, siehe Anhang...was ist zu benutzen? *g*

Elvis 26. Feb 2006 14:09

Re: C# und eigene Komponenten
 
Du kannst einfach eine neue Klasse anlegen und ihr den Vorfahren Component geben.
Dadurch kannst du sie beim nächsten Mal im designer editieren. Du kannst aber auch ein UserControl anlegen und sofort den Vorfhren von UserControl auf Component ändern. Dadurch läuft e weiterhin als partial clas, also der hässliche Designer code landet außer Sichtweite in einer Extradatei. ;)

Die Jungs bei MS sind doch echt verrückt... :lol: Integrieren den halben EnterpriseMan in C#X aber vergessen das Component template :lol:

Zurück zur Frage nach dem Registrieren in die IDE:
Sowas gibt es nicht mehr in der Form, die du kennst.
Jede Komponente, die du innerhalb einer Solution (Solution==ProjectGroup) anlegst, wird autom. in der ToolBox ercheinen. Du kannst sie also benutzen *ohne* sie in die IDE registrieren zu müssen.
Willst du Komponenten dauerhaft in der IDE haben einfach ein Rechtsklick auf die ToolBox und mit "Choose items" hast du das was du willst. ;)

Christian S. 26. Feb 2006 14:35

Re: C# und eigene Komponenten
 
:lol: Da bin ich ja echt froh, dass ich die Professional hab. Aber okay, irgendwoher muss der "geringe" Preis der Express-Version ja kommen ;-)

Schätze mal, wie Elvis' es beschrieben hat (UserControl anlegen und nach Component ändern) ist wohl am einfachsten. Und UserControl habe ich auf dem Screenshot schon gesehen! :zwinker:

Pseudemys Nelsoni 26. Feb 2006 19:24

Re: C# und eigene Komponenten
 
Zitat:

Jede Komponente, die du innerhalb einer Solution (Solution==ProjectGroup) anlegst, wird autom. in der ToolBox ercheinen. Du kannst sie also benutzen *ohne* sie in die IDE registrieren zu müssen.
Willst du Komponenten dauerhaft in der IDE haben einfach ein Rechtsklick auf die ToolBox und mit "Choose items" hast du das was du willst.
Das klingt genial :)

Magst Du mir sagen, was hier falsch ist?

Code:
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;

public class Me
{
    string Nickname;
    string Realname;
    string Username;
}

namespace PBLib
{
    public class Client: Component
    {
        Me Me = new Me();
        public Client() {
            Me.
    }
}
An die Membervariablen von "Me" komme ich irgendwie gar nicht :(. Bitte nicht schlagen <g> Es sind nur Versucge mit dem ganzen mal klarzukommen :mrgreen:

Zitat:

Und UserControl habe ich auf dem Screenshot schon gesehen!
Yep, den konnte ich nicht verstecken :mrgreen:

Danke euch 2.

Elvis 26. Feb 2006 19:34

Re: C# und eigene Komponenten
 
Schaue mal hier:
Code:
public class Me
{
    string Nickname;
    string Realname;
    string Username;
}

public class Client : Component
{
    private readonly Me me = new Me();
   
    public Me Me
    {
        get { return me; }
    }
}
So hat du eine öffentlich Lese-Property für das Feld me. Das keyword readonly bewirkt, dass du ein Feld nur initialisieren oder innerhalb eines Constructors bechreiben kannst. Ändert hier also nciht viel am Verhalten.
Die Felder der Klasse Me haben keinen access modifier was in C# autom. private heißt.
Damit du sie im PropertyGrid eines Designers sehen kannst sollten sie durch Properties verpackt werden. ;)

edit: initialisierung vergessen...

Thorben77 26. Feb 2006 19:34

Re: C# und eigene Komponenten
 
Nabend.
Wenn ich mich nicht irre (bin auch grad' am C#-lernen :wink: ), musst Du die auch als public deklarieren:

Code:
public class Me
{
    public string Nickname;
    public string Realname;
    public string Username;
}
oder am besten auch gleich als Eigenschaft mit get- und set-Methode:
Code:
public class Me
{
    private string nickname;

    public string Nickname
    {
        get
        {
            return nickname;
        }
        set
        {
            nickname = value
        }
    }
}
MfG

PS: Nicht schlagen, wenn ich Mist erzähle :angel2: .

Edit: Rechtschreibfehler.

Pseudemys Nelsoni 26. Feb 2006 19:37

Re: C# und eigene Komponenten
 
Ne, hast keinen Mist erzählt, danke :thumb: . In Delphi waren Felder ohne explizite Angabe von "public" automatisch public...man muss sich einiges neu angewöhnen ... :lol:

Edit: Evlis Methode ganz überlesen.. *nachhol

Christian S. 26. Feb 2006 19:47

Re: C# und eigene Komponenten
 
Und wenn Du auch noch 'ne hübsche Darstellung im OI haben willst, kannst Du Dir mal diese beiden Beiträge ansehen.

http://www.c-sharp-forum.de/topic_Po...ten_54234.html
http://www.c-sharp-forum.de/topic_Ko...cht_55075.html

Grüße
Christian

//edit: Eher den Zweiten als den Ersten ;-)

Pseudemys Nelsoni 26. Feb 2006 20:22

Re: C# und eigene Komponenten
 
@Elvis: Danke für das Beispiel. Da musste ich schon etwas überlegen um das nachzuvollziehen (wegen den ganzen Me's *g*)

Das wollte ich überhaupt fragen... Ist jede publicproperty nachher automatisch published? Wie siehts aus, wenn ich einige propertys nicht im "OI" sehen möchte?.

@Christian: Danke, ich guck gleich mal rein :D

Christian S. 26. Feb 2006 20:31

Re: C# und eigene Komponenten
 
Zitat:

Zitat von Pseudemys Nelsoni
Wie siehts aus, wenn ich einige propertys nicht im "OI" sehen möchte?.

Schau mal meinen allerersten Beitrag in diesem Thread :-) Kommt IMHO auch irgendwo in den Quellcodes vor, die Du bei den beiden Links findest.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz