Benutzer mit den meisten Antworten
Eigenen Dialog entwerfen

Frage
-
Ich bin gerade dabei einen eigenen FarbDialog zu entwerfen. Dieser soll eine abgespeckte Version des bereits vorhanden ColorDialogs werden. Nun möchte ich, wenn in dem eigens geschriebenen FarbDialog eine Farbe selektiert wurde, diese Farbe (RGB) als quasi "Rückgabewert" an andere übergeben können. Beispielsweise so:
//so funktioniert es mit einer Instanz von ColorDialog: Button1->BackColor = colorDialog1->Color; //so soll es funktionieren mit einer Instanz von FarbDialog: Button2->BackColor = farbDialog1->Color;
Mit dem Standard ColorDialog funktioniert dies wie im Beispiel über die Eigenschaft "Color". Genau diese Eigenschaft möchte ich auch in meinen FarbDialog integrieren... aber irgendwie steh ich da gerade auf dem Schlauch und bekomm es nicht hin. Weiß jemand wie das geht? Also wie bringe ich meinem FarbDialog die Eigenschaft Color bei? Ich beschäftige mich noch nicht allzu lang mit C++ Klassen und hab wahrscheinlich nur ein Verständnisproblem. Die Eigenschaft Color ist doch im Grunde nix anderes als eine public Strukur in der Klasse ColorDialog... oder?
Antworten
-
Der Compiler kommt da etwas durcheinander... Du musst den Namespace angeben, dass geht es:
private: Color _Color; // Hier ist als Beispiel Deine ausgewählte Farbe drin... public: property Color Color { System::Drawing::Color get() { return _Color; } void set (System::Drawing::Color value) { _Color = value; } }
Jochen Kalmbach (MVP VC++)- Als Antwort markiert Seppel der Programmierer Mittwoch, 5. Januar 2011 10:42
Alle Antworten
-
Du musst einfach ein Property "Color" in Dein Form hinzufügen...
PS: Du beschäftigst Dich nicht mit C++ sondern mit C++/CLI, das ist was ganz anderes...
Siehe auch:
http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/
Jochen Kalmbach (MVP VC++) -
Am einfachsten ist es, wenn Du Dir die Hilfe zu dem ColorDialog-Property anschaust:
http://msdn.microsoft.com/en-us/library/system.windows.forms.colordialog.color.aspx=>
private: Color _Color; // Hier ist als Beispiel Deine ausgewählte Farbe drin... public: property Color Color { Color get () { return _Color; } void set (Color value) { _Color = value; } }
Jochen Kalmbach (MVP VC++) -
Vielen Dank für deine Hilfe. Über Propertys geht sowas also. Habe es jetzt fast genauso implementiert wie du in deinem Beispiel, mit dem Unterschied das "property Color Color" nicht funktioniert, da Color ein bekannter Datentyp ist und somit nicht noch zusätzlich als Name verwendet werden kann. Habe es so umgesetzt:
private: Color color; public: property Color Farbe { Color get() { return color; } void set(Color value) { color = value; } }
So kann ich außerhalb der meiner Klasse über "farbDialog1->Farbe" auf die "color"-Strukur innhalb der farbDialog-Instanz zugreifen, das ist schon mal wunderbar!
Nur eins stört mich noch ein wenig, und zwar dass ich den Umweg gehen muss und einen eigenen property-Namen "Farbe" erzeugen muss. Ich wöllt die Property halt gern "Color" nennen, damit es genauso zu verwenden ist wie bei den bereits vorhandenen Standardkomponenten. Aber "property Color Color" funktioniert ja leider nicht, oder gibt es da einen Trick?
-
Der Compiler kommt da etwas durcheinander... Du musst den Namespace angeben, dass geht es:
private: Color _Color; // Hier ist als Beispiel Deine ausgewählte Farbe drin... public: property Color Color { System::Drawing::Color get() { return _Color; } void set (System::Drawing::Color value) { _Color = value; } }
Jochen Kalmbach (MVP VC++)- Als Antwort markiert Seppel der Programmierer Mittwoch, 5. Januar 2011 10:42
-
Sicher geht das.
Das Problem ist, dass Du nur den richtigen Scope für Color wählen musst. Im Property ist Color kein Typ, sondern eben der Name des Properties!private: Color m_color; public: property Color Color { ::Color get() { return m_color; } void set(::Color value) { m_color = value; } }
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de