![]() |
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. |
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 ![]() |
Re: Property-Grid benutzen
Glaub mir, Mathias würde nicht fragen, wenn er sich nicht schon durch die Hilfe gewühlt hätte.
|
Re: Property-Grid benutzen
Zitat:
Suche mal nach
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; } } } } |
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? |
Re: Property-Grid benutzen
Zitat:
In .Net arbeitet man so, dass die Präsentationsschicht keine Ahnung von der Anwendungslogik hat. ( Es ist halt eine komplette OOP-Umgebung ;`) ) Zitat:
Interessant wären da für dich:
Code:
Damit kann es deiner "History-Klasse" vollkommen egal sein, was für ein Typ die Property ist und aus welcher Klasse er kommt. ;)
Reflection
Propertyinfo GetSetMethod Methodinfo.Invoke |
Re: Property-Grid benutzen
Delphi-Quellcode:
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.
Reflection
Propertyinfo GetSetMethod Methodinfo.Invoke |
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. |
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 ;) ) |
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:
Was ich Depp bis heute nicht wusste, war der simple Teil hier:
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; } } }
Code:
: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.
TTestKlasse test = new TTestKlasse();
propertyGrid1.SelectedObject = test; So, jetzt hätte ich noch ein paar kosmetische Fragen, wenn mir da noch einer helfen könnte
:love: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 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