Anzeige

PropertyGrid: Eigene Enumeration im Grid auswählbar machen


Spock

Grünschnabel
#1
Hallo,
ich habe in einer managed C++ .NET Anwendung ein PropertyGrid zum Anzeigen meiner Programmeigenschaften.
Wenn ich nun z.B. ein Property vom Typ Bool in meiner Klasse hab, so ist dann während der Laufzeit eine Comboxbox mit den Einträgen True/False sichtbar zum Festlegen des Wertes der boolschen Eigenschaft. So weit so gut.

Wenn ich das nun mit einer eigenen Enumeration mache, so werden dann allerdings nicht die Elemente dieses Enums angezeigt, sondern nur ein Textfeld mit einer "0".
Frage: Wie kriege ich es hin, dass die Elemente meiner eigenen Enumeration auch in einer Combobox aufgelistet werden?


Frage 2: Wie kann ich eine Liste von Enumerations-Elementen wie oben genannt einzeigen, welche ich erst zur Laufzeit zusammengebaut habe?
Hintergrund: Ich will alle Dateien in einem Ordner in einer Combobox (im PropertyGrid) anzeigen.


Bitte um Hilfe, danke im Voraus.
 

Spock

Grünschnabel
#2
Zu Frage 1:
Hab selbst herausgefunden, dass man seine Enumeration als "__value" deklarieren muss.

Code:
	__value enum LanguageEnum
	{
		ENGLISH = 0,
		GERMAN = 1
	};
Frage 2 würde mich dennoch interessieren.
 
#3
Hi,

hab ein ganz ähnliches Problem gepostet.
Schau mal ins c# Forum.

kannst du mal ein paar Codeausschnitte von deinem Programm posten
würde gerne sehen wie du das mit der DropDown Box es gelöst hast.

thx Tass
 

Spock

Grünschnabel
#4
Hi,

Ich bin nicht mehr so ganz in der Thematik drin, aber das Problem mit dem Drop-Down hatte ich nicht gelöst. Ich habe es dann als aureichend erachtet, die Enumerationen (wie oben) nur zur Design-Zeit zu erstellen.

Man kann allerdings über lokalisierte Resourcen die Property-Namen in lokalisierte Namen *irgendwie* umbennen.
 
#5
Hallo zusammen,
leider habe ich keinC# zur Verfühgung. Ich muss mich mit C++.NET in der Firma rumschlagen. In C# habe ich das Problem schon gelöst.

Ich habe auch probleme mit Managed Code und dem PropertyGrid:

meine __propertys kann ich dem PropertyGrid wunderbar zu ordnen und es macht mir freude zu sehen das es eigentlich nicht schwer ist dies zu verwircklichen. Ich habe auch einen schönen link gefunden der mein Problem wunderbar löst ->

http://www.schlechte-doku-hasser.de...icle&sid=140&mode=mode=thread&order=0&thold=0

Das habe ich dann in C++.NET übersetz und siehe da ein Standard FileNameEditor öffnet sich. Ich war begeistert. Nun wollte ich mein eigenes "MyEditor" Class bauen um einfluss auf die Filter zu nehmen damit der User sich nur bestimmte Dateien aussuchen kann.

Wie in der Anleitung habe ich das gemacht in meinen Attributen der __property die Klasse eingebaut

Code:
[... EditorAttribute(__typeof(MyEditor),
  __typeof(System::Drawing::Design::UITypeEditor)),  ....]
Meine MyEditor Klasse geht so:

Code:
#pragma once

using namespace System;
using namespace System::Windows::Forms::Design ;

namespace QMT4{
public __gc class MyEditor : public System::Windows::Forms::Design::FileNameEditor 
{
protected:
	 virtual void InizializeDialog(System::Windows::Forms::OpenFileDialog *openFileDialog)
	{
		 //InitializeDialog (openFileDialog );

		//Einstellungen vornehmen
		openFileDialog->CheckFileExists = false;
		openFileDialog->ShowReadOnly = false;
		openFileDialog->Title = "Wählen sie eine Datei!";
		openFileDialog->Filter = "Bilddatei ((empfolen) *.jpg)|*.jpg| Word (*.doc)|*.doc| Excel (*.xls)|*.xls";
        openFileDialog->DefaultExt = "*.jpg";

	}
public:
	MyEditor(void){		

}
	~MyEditor(void){

	}
};
}
Immer wenn ich dann auf den Knopf neben der Grid Klicke kommt der Standard Editor hoch. Was mache ich falsch :confused: :confused: :confused:

G/ winini
 
#6
Hallo zusammen,

ich lach mich weg, da suche ich das ganze WWW durch und finde kein Beispiel für mein Problem. Obwohl es in C# ein Beispiel gibt und meiner Erfahrung nach auch übertragbar ist nach C++.NET (Managedcode). Es war nie ein Problem und nun das! :-(

Wie ich in meiner vorrigen Beschreibung geschrieben habe
Code:
...

protected:
	 virtual void InizializeDialog
(System::Windows::Forms::OpenFileDialog * openFileDialog) {
...

}
steckt der Fehler im Detail oder ich muss mir eine Brille kaufen!

Code:
...

protected:
	 virtual void InitializeDialog
(System::Windows::Forms::OpenFileDialog * openFileDialog) {
...

}
Wem jetzt der Fehler auffällt ist gut oder besser als ich. Ich habe eine Woche gesucht. Peinlich peinlich :-(

Ich brauchte nur das z in ein t in "InitializeDialog" auszutauschen dann funktioniert es auch mit dem Nachbarn.......

Vielen Dank trotzdem. Ich hoffe nur, dass wenn man mal nach diesem Thema googelt, dann auch hier hinein finden wird und alle C++.NET geplagten "geolft werden wird" ;) :p :p

Gruß / winini
 
Anzeige
Anzeige