Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Prism Property-Grid benutzen (https://www.delphipraxis.net/39072-property-grid-benutzen.html)

MathiasSimmack 28. Jan 2005 08:40


Property-Grid benutzen
 
Hi Leute.

Kurze Frage, die ich hier mal frech in Delphi.NET poste, obwohl ich ja eigentlich mit SharpDevelop arbeite. :stupid: Kann mir irgendwer kurz erläutern, wie man das PropertyGrid-Control benutzt? Ich weiß wie es mit den Eigenschaften für Buttons, Forms, Edits, usw. funktioniert. Aber kann ich damit auch eigene Daten anzeigen lassen? Und wenn Ja, was muss ich dafür tun? Ein Link auf eine Erklärung im Web würde mir auch schon reichen. :)

Danke.

kiar 28. Jan 2005 09:39

Re: Property-Grid benutzen
 
hallo mathias,

schon mal auf F1 gedrückt, da wird SDK geladen, in dem du die info's hast.


raik

edit: ansonsten mal hier schauen
http://search.microsoft.com/search/r...&c=0&s=1&swc=0

Luckie 28. Jan 2005 09:41

Re: Property-Grid benutzen
 
Glaub mir, Mathias würde nicht fragen, wenn er sich nicht schon durch die Hilfe gewühlt hätte.

Robert_G 28. Jan 2005 10:21

Re: Property-Grid benutzen
 
Zitat:

Zitat von Luckie
Glaub mir, Mathias würde nicht fragen, wenn er sich nicht schon durch die Hilfe gewühlt hätte.

Aber wohl nicht genau genug. :zwinker:
Suche mal nach
  • BrowseableAttribute
  • UITypeEditor
  • EditorAttribute
  • DefaultPropertyAttribute
  • DefaultValueAttribute

Es müssen auch gar keine Component-Ableitungen sein, die man sich in sein PropertyGrid holt.
Du kannst irgendeine ( :!: ) Instanz da randocken und schon kann man alle Properties im Grid editieren (natürlich nur, wenn sie nicht mit [Browsable(false)] versehen sind ;)

Nett sind zum Beispiel Ableitungen des FileNameEditors um nur spezielle Dateien im Filter zu haben:
Code:
using System.ComponentModel;
using System.Drawing.Design; //befindet sich in System.Drawing.dll !
using System.Windows.Forms;
using System.Windows.Forms.Design; //befindet sich in System.Design.dll !

namespace SomeClasses
{
   public class CSharpFileNameEditor :   FileNameEditor
   {
      protected override void   InitializeDialog(OpenFileDialog   openFileDialog)
      {
         openFileDialog.Filter =   "all code files|*.cs;*.aspx;*.aspx.cs|all files|*.*";
         openFileDialog.FilterIndex = 0;
         //base.InitializeDialog(openFileDialog); Der muss natürlich weg *g* tss.... immer diese Autocompletion....
      }
   }

   public class SampleClass
   {
      string fileName;

      [Editor(typeof (CSharpFileNameEditor),
              typeof (UITypeEditor))]
      public string FileName
      {
         get   { return fileName; }
         set   { fileName = value;   }
      }
   }
}

LarsMiddendorf 28. Jan 2005 12:38

Re: Property-Grid benutzen
 
Ich habe auch noch eine Frage zum PropertyGrid, die ich leider trotz umfangreicher Suche nicht klären konnte. Vielleicht weiß es ja jemand.
Das PropertyChanged Event wird ausgelöst, wenn man den Wert einer Eigenschaft verändert. Es gibt einen Paramter oldvalue, der den alten Wert der Eigenschaft enthält. Wenn jetzt mehrere Objekte im PropertyGrid angezeigt werden, gibt es keine Möglichkeit, an die alten Werte der Eigenschaft von allen veränderten Objekten zu kommen. Wenn das Ereignis ausgelöst wird, ist die Eigenschaft aber schon in den Objekten selber verändert worden. Ich möchte aber gerne die alten Werte für Undo/Redo speichern? Gibt's da eine elegante Lösung?

Robert_G 28. Jan 2005 13:14

Re: Property-Grid benutzen
 
Zitat:

Zitat von LarsMiddendorf
Ich möchte aber gerne die alten Werte für Undo/Redo speichern?

:shock: Du bist nicht mehr in Delphi32! Da konnte man es gerade noch so verschmerzen, wenn jemand ein DataSet direkt im Formular code erzeugt/manipuliert.
In .Net arbeitet man so, dass die Präsentationsschicht keine Ahnung von der Anwendungslogik hat. ( Es ist halt eine komplette OOP-Umgebung ;`) )
Zitat:

Zitat von LarsMiddendorf
Gibt's da eine elegante Lösung?

Für deine Fälle wäre es wohl ganz praktisch eine Klasse zu haben, in der du alle Instanzen registrierst, die für dein UnDo/ReDo in Frage kommen.
Interessant wären da für dich:
Code:
Reflection
Propertyinfo
GetSetMethod
Methodinfo.Invoke
Damit kann es deiner "History-Klasse" vollkommen egal sein, was für ein Typ die Property ist und aus welcher Klasse er kommt. ;)

LarsMiddendorf 28. Jan 2005 13:51

Re: Property-Grid benutzen
 
Delphi-Quellcode:
Reflection
Propertyinfo
GetSetMethod
Methodinfo.Invoke
Ja so ähnlich habe ich das auch gemacht. Das ist alles ordentlich getrennt und ich benutze das Command Pattern um an den Daten Änderungen durchzuführen bzw. rückgängig zu machen. Aber ich muß ja wissen welchen Wert ich später über Reflektion wieder zurückschreibe. Das PropertyGrid löst aber kein Eregnis aus, bevor es den Wert ändert, und im PropertyValueChanged Ereignis gibt es nur einen Wert für oldvalue, auch wenn mehrere Objekte ausgewählt sind. Gibt's da einen Weg einzugreifen, also ein Ereignis, dass ausgelöst wird, bevor das PropertyGrid die Änderung durchführt? Also eine Art PropertyValueChanging Event.

MathiasSimmack 28. Jan 2005 15:46

Re: Property-Grid benutzen
 
So, Leute, ich will auch mal eine dumme Frage stellen und von euch dafür ein "Benutz mal die Suche" oder "Lies mal die Hilfe" hören. :) :oops: Noch mal einen Schritt zurück.

Sagen wir, ich denke mir eine Klasse oder ein Objekt mit verschiedenen Werten aus, meinetwegen: ein String, ein Integer und ein Boolean-Wert, dann könnte ich mir also diese 3 Eigenschaften im PropertyGrid anzeigen lassen? Beim Bool-Wert also diese Combobox -> True/False?

Sorry, wenn das eine einfache Frage für euch ist.
Äh, das ist ´ne Hausaufgabe, hat da vllt. jemand fertigen Quellcode für mich? :mrgreen:

Ernsthaft, so ein klitze Beispiel wäre sehr hilfreich. Ich lerne am besten, wenn ich eiskalt den Quellcode von fremden Menschen klau... ... anschauen kann.

Robert_G 28. Jan 2005 15:50

Re: Property-Grid benutzen
 
Du hast dir schon mein Beispielchen angeschaut? :gruebel:
Das zeigt dir auch, wie du speziell für diese Property einen anderen Editor anlegen kannst.

Nachtrag: Und bevor du fragst: Ja es MUSS immer ein Property sein. (Auf die Art kann sich das PropertyGrid den Getter & Setter schnappen ohne deine Variable kaputt zu machen ;) )

MathiasSimmack 7. Feb 2005 21:37

Re: Property-Grid benutzen
 
So, ich noch mal. Bin jetzt dazu gekommen, mich mal mit dem PropertyGrid zu befassen. Also, was ich wollte, war ganz einfach folgendes (Delphi.NET oder C# spielt ja keine Rolle):

Ich erstelle eine neue leere Form und packe dieses schöne PropertyGrid drauf, das vom .NET zur Verfügung gestellt und bspw. auch von SharpDevelop und Delphi.NET selbst benutzt wird. Und in diesem Grid wollte ich ganz gern was eigenes anzeigen. Ganz simpel. Nix für ungut, Robert, was dein Code macht habe ich noch nicht ganz begriffen. :oops:
Aber hier erst mal das, was ich inzwischen hinbekommen habe. Ausgehend von meinem letzten Beitrag habe ich eine ganz simple Testklasse erstellt:
Code:
public class TTestKlasse {
  private string TestString;
  private int TestInteger;
  private bool TestBool;

  public string A_Schtring {
    get {
      return TestString;
    }
    set {
      TestString = value;
    }
  }

  public int An_Intitscher {
    get {
      return TestInteger;
    }
    set {
      TestInteger = value;
    }
  }

  public bool A_Buhl {
    get {
      return TestBool;
    }
    set {
      TestBool = value;
    }
  }
}
Was ich Depp bis heute nicht wusste, war der simple Teil hier:
Code:
TTestKlasse test = new TTestKlasse();
propertyGrid1.SelectedObject = test;
:wall: Das muss man mir doch sagen. :mrgreen: Und schon zeigt das Grid den Inhalt meiner Testklasse an. Mehr wollte ich eigentlich nicht, weil ich mich in meinem Programm nicht mehr mit Einstellungsdialogen rumschlagen, sondern stattdessen das Grid nutzen wollte.

So, jetzt hätte ich noch ein paar kosmetische Fragen, wenn mir da noch einer helfen könnte
  • Wie kann ich eigene Kategorien einrichten? Im Augenblick habe ich nur "Misc".
  • Warum ist der Text, bzw. der Integer, bzw. die Bool-Auswahl immer fett gedruckt?
  • Wie kriege ich eine Beschreibung hin? Hat das was mit den <summary>-Tags zu tun?
Ich schaue mich einstweilen weiter in der Hilfe um und probiere ein bisschen. Aber wenn jemand die Antwort schon weiß, dann wäre ich für eine kurze Anmerkung sehr dankbar.
:love:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:05 Uhr.
Seite 1 von 2  1 2      

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