| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: C#.net Attributsargumente (949 mal gelesen)
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 20. Mai. 2009 11:57 <-- editieren / zitieren --> Unities abgeben:
ich baue mir in den Optionenkatalog einen zusätzlichen Einstellungs-Tab für unsere Applikation. Dazu defniiere ich die einzelnen Optionen in einer serialisierbaren Klasse. Code:
//---------------------------------------------------------------------------------------------------------- static private Boolean _PlotSettings_UpdateZkopf = true; [Description("Diese Einstellung definiert, ob beim Öffnen der Zeichnung die Zeichnungsköpfe (Änderungsvermerke, Kundendaten etc.) aktualisiert werden soll"), Category("Plot Settings"), DisplayName( "Zeichnungsköpfe (allg. Daten) aktualisieren") ] public Boolean Update_Zkopf { set { _PlotSettings_UpdateZkopf = value; } get { return _PlotSettings_UpdateZkopf; } }
Nur wie bringe ich da eine mehrsprachige Version zusammen. Wenn ich die Texte in den Attributen Description, Category und DisplayName aus einer Textresource hole, bekomme ich folgende Fehlermeldung:
Fehler 1 Ein Attributargument muss ein constant-, typeof- oder Arrayerstellungsausdruck sein. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 20. Mai. 2009 12:40 <-- editieren / zitieren -->
Hi, wo bekommst Du den Fehler? Beim Project-Build oder während runtime? Ich bekomme (mit VS2008) keinen Fehler, weder Fehlermeldung beim Erstellen noch im Lauf - alfred - ------------------ www.hollaus.at |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 20. Mai. 2009 12:48 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 20. Mai. 2009 12:57 <-- editieren / zitieren -->
Hi, sollte eigentlich auch mit 2005 keinen Fehler bringen, denn ich sehe auch keinen Ich würde mal versuchen, Attribut für Attribut aus der Deklaration zu entfernen und dadurch dem Auslöser näherzukommen. - alfred - ------------------ www.hollaus.at |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 20. Mai. 2009 13:05 <-- editieren / zitieren --> Unities abgeben:
wie holst Du denn den String aus der resource. Vielleicht liegt da mein Fehler ? [Category(OptionsDlg.Texte.ResourceManager.getstring("PlotSettings")), ... bzw. in Kurzform [Category(OptionsDlg.Texte.PlotSettings)), ... liefer z.B.: den Fehler Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 20. Mai. 2009 13:13 <-- editieren / zitieren -->
Hi, [Category(OptionsDlg.Texte.ResourceManager.getstring("PlotSettings")), ... na das ist der Auslöser, der so schon leider nicht funkt, das ist eben nicht konstant und damit ist auch nichts mit direkt in Attribut-Definition hineinschreiben; entspricht aber auch nicht obigem Beispiel In diesem Fall bist Du gezwungen, eine Klassendefinition im Lauf zu erstellen, im Lauf zu kompilieren und dann erst zu verwenden. Ich hab mich zwar davon überzeugen lassen, dass das notwendig ist, aber nie im Detais ausgetüfftelt. Sorry, ich nehme an, diese Antwort macht Dir keine Freude - alfred - ------------------ www.hollaus.at |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 20. Mai. 2009 13:57 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 20. Mai. 2009 14:11 <-- editieren / zitieren -->
Hi, Zitat: Wofür gibts denn diese Attribute,w enn man die nicht (so einfach) lokalisieren kann? Sind ja dann für Arsch und Friedrich
....na ganz so heftig würd ich's nicht ausdrücken, aber gleichzeitig muss ich Dir auch recht geben. Lösungsansatz: entweder Du 'spielst' Dich mit ResourceManager (einigermassen auswändige Lösung für Klassendefinitionen, deren Attributswerte automatisiert vom resx-File übersetzt werden ...oder Du hast eine begrenzte Anzahl von Sprachen (in die Du zu übersetzen hast) und eine begrenzte Anzahl von Klassen, in denen Du Attribute zu übersetzen hast, dann könntest Du folgenden Weg gehen: a) definiere eine Basisklasse, in der Du Deine Properties definierst und auf die Du im Programm hingreifst b) je Übersetzungssprache erzeugst Du eine von der Basisklasse abgeleitete (INHERIT) Version, in denen Du nur die Properties definierst und denen jeweils für die Sprache definierte Attributs-werte. c) im Lauf des Programms suchst Du dann für die Anzeige im PropertyGrid die Klasse für die gewünschte Sprache aus. Ich gebe zu, der Weg ist aus Sicht der Programmierung NICHT SCHÖN, aber unter obigen Voraussetzungen schnell geschrieben. - alfred - ------------------ www.hollaus.at |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 20. Mai. 2009 14:36 <-- editieren / zitieren --> Unities abgeben:
Hallo ich denke, ich werde mich für die 2. Lösung entscheiden. Es gibt eh nur Deutsch und Englisch, und auch nur relativ wenige Einstellungsmöglichkeiten im Propertydialog. So viele Vorteile die .net Porgrammierung bietet, das erscheint mir etwas konfus. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |