Entwickler-Ecke

WinForms - Arbeiten mit dem PropertyGrid in Delphi.Net??


winx - Do 31.08.06 08:45
Titel: Arbeiten mit dem PropertyGrid in Delphi.Net??
Guten Morgen,

wie kann ich das folgende Objekt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
unit VariaJob;

interface

uses
  System.Collections;

type
  TVariaJob = class
  private
    m_VariaObjects : ArrayList;
    m_CurrentSerial : string;
    m_MultiUse : boolean;
    m_JobQuantity : integer;
    m_MultiPartsCount : integer;
    m_MultiPartsQuantity : integer;

  public
    //Eine Liste die alle im Job vorhandenen Variablen Objekte enthält
    property VariaObjects : ArrayList read m_VariaObjects;
    //Die letzte vergebene Seriennummer
    property CurrentSerial : string read m_CurrentSerial write m_CurrentSerial;
    //Gibt an, ob der Nutzer Mehrfachnutzen wünscht
    property MultiUse : boolean read m_MultiUse write m_MultiUse;
    //Gibt an, wie oft der Job gelasert werden soll
    property JobQuantity : integer read m_JobQuantity write m_JobQuantity;
    //alle im job vorhandenen multiparts
    property MultiPartsCount : integer read m_MultiPartsCount write m_MultiPartsCount;
    //die anzahl der vom Benutzer gewünschten Multiparts
    property MultiPartsQuantity : integer read m_MultiPartsQuantity write m_MultiPartsQuantity;

    constructor Create;
  end;

implementation

constructor TVariaJob.Create;
begin
  inherited Create;
  m_VariaObjects := ArrayList.Create();
end;

end.


in einem PropertyGrif anzeigen lassen. Hab das ganze wie in einem C# Tutorial gemacht mit:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
//Funktioniert:
vJob := TVariaJob.create();
m_MainForm.PropertiesGrid.SelectedObject := vJob.VariaObjects;

//Funktioniert aber nicht:
vJob := TVariaJob.create();
m_MainForm.PropertiesGrid.SelectedObject := vJob;


Warum funktioniert das erste, das zweite aber nicht???

Wie kann ich in Delphi [CategoryAttribute] hinzufügen???

Danke,
winx


Moderiert von user profile iconChristian S.: Topic aus .NET verschoben am Do 31.08.2006 um 11:51


winx - Do 31.08.06 09:51

Hab was gefunden, die Properties müssen "published" sein damits funzt...
Ne andere Frage: Wie kann ich Attribute zu den Objekten hinzufügen:


Delphi-Quelltext
1:
2:
[CategoryAttribute('Meine Kategorie')]
property Prop...


Danke

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


Christian S. - Do 31.08.06 11:43

Ich verstehe die Frage nicht ganz, Du hast doch jetzt schon das Attribut für die Kategorie zugewiesen. Allerdings nicht dem Objekt, sondern der Property innerhalb der Klasse.


winx - Do 31.08.06 11:47

Hi christian,

hab das Problem schon gelöst. Wollte es der Property zuweisen. Hat jetzt geklappt.
Weisst du, ob es möglich ist, nur bestimmte Kombinationen zuzuweisen.

Bsp:


Delphi-Quelltext
1:
2:
property Bezeichner : string ...
property Wert : string...

Ich möchte jetzt links den bezeichner (den string wert des bezeichners) und rechts den Wert stehen haben, den der Benutzer
zuweisen kann...

ist sowas auch möglich oder geht es nur "objektbezogen" ???

danke

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


Christian S. - Do 31.08.06 11:50

Ich verstehe nicht, was Du meinst.


winx - Do 31.08.06 12:45

ich versuchs an einem Beispiel zu erklären.

Also ein objekt Haus hat zwei Properties,

property Name = "Hans"
property Inhalt = "4711"

Nun soll im PropertyGrid nich wie eigentlich zwei Properties

Name|Hans
Inhalt|4711

sondern nur noch

Hans|gelb

erscheinen, nur den Inhalt (also gelb) kann man editieren.

Weisst du was ich meine???


Kha - Do 31.08.06 12:54

Ein PropertyGrid zeigt Properties an, nix Anderes ;) . Und eine Property hat einen festen Namen.


winx - Do 31.08.06 13:56

Alles klar. verstanden.
welche komponente könnte ich denn dann am besten verwenden, um mein problem zu lösen ???


Robert_G - So 03.09.06 17:39

user profile iconKhabarakh hat folgendes geschrieben:
Ein PropertyGrid zeigt Properties an, nix Anderes ;) . Und eine Property hat einen festen Namen.
Das sollte theorethisch mit einem PropertyGrid möglich sein.
Man kann die Art wie es eine bestimmte Eigenschaft oder einen bestimmten Typen darstellt frei selbst gestalten.
Was WinX da vorhat ist bestimmt nicht so schwierig wie es erscheint. Bei bestimmten Usern vergeht mir aber ziemlich schnell die Lust auch nur eine Zeile zuviel zu tippen.
Vor allem bei denen, die wiederholt wild cross postings machen ohne die Threads gegenseitig zu verlinken. Das zeugt von Ignoranz oder Egoismus, keins von beidem lässt mich vor Hilfbereitschaft überschäumen. ;)


winx - Mo 04.09.06 09:07

Hi,

ich hab nur crosspost gemacht, da es ziemlich dringend ist...Aber wenn ihr möchtet,
kann ich diese das nächste mal verlinken.

Hab gedacht, sowas is nich erwünscht.

Könntest du mir bitte trotzdem helfen?

Danke!!!


Kha - Mo 04.09.06 12:20

user profile iconRobert_G hat folgendes geschrieben:
user profile iconKhabarakh hat folgendes geschrieben:
Ein PropertyGrid zeigt Properties an, nix Anderes ;) . Und eine Property hat einen festen Namen.
Das sollte theorethisch mit einem PropertyGrid möglich sein.
Man kann die Art wie es eine bestimmte Eigenschaft oder einen bestimmten Typen darstellt frei selbst gestalten.
Ui, is ja hübsch :D *soforteinspeicher* . Wenn man ein wenig darüber nachdenkt, muss ja auf irgendeinem Weg das Events-Tab in die IDE kommen :angel: .

@winx: PropertyTab heißt das Stichwort. Das Einfachste wäre es wohl, in einer Ableitung den gewünschten Properties ein neues DisplayNameAttribute zu verpassen.

user profile iconwinx hat folgendes geschrieben:
Hab gedacht, sowas is nich erwünscht.
Jupp, Cross-Postings, die zu parallelen, inhaltsgleichen Diskussionen führen, sind nicht wirklich erwünscht ;) .


winx - Mo 04.09.06 12:35

danke, werd ich mal testen...
ja aber ein crossposting über mehrere Foren auch? Hab nur gedacht innerhalb des c#forums ?


winx - Mo 04.09.06 14:36

Hi,

könntet ihr mir nochmals helfen ?

Weiss zwar nich, ob das überhaup geht, da ich ne Liste von "haus-Objekten" hab, jedes dieser Objekte
sollte einen eigenen Spalte im PropertyGrid belegen...

aber:
Muß ich mich nun von dem Grid ableiten und die Eigenschaft überschreiben, oder muß ich meine eigene "Property" überschreiben?
Könnte ihr mir bitte ein Beipiel posten?

Danke!!!


Kha - Di 05.09.06 11:56

Hm? Unter meinem Stichwort findest du doch ein einwandfreies Beispiel, wie man es eben vom SDK gewohnt ist.

user profile iconwinx hat folgendes geschrieben:
Weiss zwar nich, ob das überhaup geht, da ich ne Liste von "haus-Objekten" hab, jedes dieser Objekte sollte einen eigenen Spalte im PropertyGrid belegen...
Du hast also eine Klasse, die eine Liste beinhaltet, und willst nun jeweils zwei Properties jedes Elementes gegenüberstellen? Jab, sollte problemlos möglich sein.