AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Property-Grid benutzen

Ein Thema von MathiasSimmack · begonnen am 28. Jan 2005 · letzter Beitrag vom 8. Feb 2005
Antwort Antwort
Seite 1 von 2  1 2      
MathiasSimmack
(Gast)

n/a Beiträge
 
#1

Property-Grid benutzen

  Alt 28. Jan 2005, 09:40
Hi Leute.

Kurze Frage, die ich hier mal frech in Delphi.NET poste, obwohl ich ja eigentlich mit SharpDevelop arbeite. 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.
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#2

Re: Property-Grid benutzen

  Alt 28. Jan 2005, 10:39
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
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Property-Grid benutzen

  Alt 28. Jan 2005, 10:41
Glaub mir, Mathias würde nicht fragen, wenn er sich nicht schon durch die Hilfe gewühlt hätte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: Property-Grid benutzen

  Alt 28. Jan 2005, 11:21
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.
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;   }
      }
   }
}
  Mit Zitat antworten Zitat
LarsMiddendorf

Registriert seit: 4. Sep 2003
Ort: Hemer
104 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Property-Grid benutzen

  Alt 28. Jan 2005, 13:38
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?
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: Property-Grid benutzen

  Alt 28. Jan 2005, 14:14
Zitat von LarsMiddendorf:
Ich möchte aber gerne die alten Werte für Undo/Redo speichern?
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 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.
  Mit Zitat antworten Zitat
LarsMiddendorf

Registriert seit: 4. Sep 2003
Ort: Hemer
104 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Property-Grid benutzen

  Alt 28. Jan 2005, 14:51
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.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#8

Re: Property-Grid benutzen

  Alt 28. Jan 2005, 16:46
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. 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?

Ernsthaft, so ein klitze Beispiel wäre sehr hilfreich. Ich lerne am besten, wenn ich eiskalt den Quellcode von fremden Menschen klau... ... anschauen kann.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: Property-Grid benutzen

  Alt 28. Jan 2005, 16:50
Du hast dir schon mein Beispielchen angeschaut?
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 )
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#10

Re: Property-Grid benutzen

  Alt 7. Feb 2005, 22:37
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.
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;
Das muss man mir doch sagen. 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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:43 Uhr.
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