2009-05-18 21 views
1

Wie referenziere ich eine konstante Zeichenfolge in meiner .designer.cs-Datei?Wie verwenden Sie konstante Zeichenfolgen in C# designer.cs-Code?

Eine einfache Antwort besteht darin, eine private String-Variable in meiner .cs-Datei zu erstellen, dann bearbeiten Sie die Datei designer.cs, um diese Variable zu verwenden, anstatt die Zeichenfolge fest zu codieren. Aber der Designer mag es nicht, das wirft einen Fehler auf. Ich verstehe, warum das nicht funktionieren kann, aber ich bin mir nicht sicher, was die beste Alternative ist.

Sollte jede meiner UI-Steuerelemente nur Text als Platzhalter haben, dann muss ich alle Texteigenschaften nur zur Laufzeit überschreiben? Auf diese Weise verliere ich den Vorteil, alles im Designer zu sehen.

Ich versuche nur herauszufinden, wie man am wenigsten Störungen verursacht, wenn sich die Dinge in Zukunft ändern. Vielen Dank.

Antwort

5

Die *.designer.* Dateien werden von Visual Studio generiert. Sie möchten diese nicht manuell ändern, es sei denn, Sie müssen dies wirklich tun, da Visual Studio unter Umständen re -generiert und Ihre Änderungen löscht.

Was Sie wirklich tun müssen, ist an Ihre konstante Zeichenfolge eine Ressource denken, die Sie dem Formular-Designer verfügbar sein möchten, so dass, wenn es den Code generiert, diese Ressource verwendet.

Es gibt mehrere Möglichkeiten, dies in Visual Studio zu erreichen. Am einfachsten geht es wahrscheinlich über Datenbindungen für die Kontrollen. Um dies zu demonstrieren, fügen Sie ein Label-Steuerelement in ein Formular ein und sehen Sie sich die Eigenschaften für das Steuerelement an.Wenn Sie die Eigenschaften nach Namen sortieren, werden zwei Eigenschaften oben in der Liste in Klammern stehen: ApplicationSettings und DataBindings. Wenn Sie diese nach unten ziehen, sehen Sie, dass beide Optionen zur Bindung an die Eigenschaft Text Ihres Labels haben. Mit diesen können Sie Ihre "Konstante Zeichenfolge" entweder in die Einstellungsdatei Ihrer App schreiben und sie über die Eigenschaft ApplicationSettings oder in einer beliebigen Datenquelle binden und über die Eigenschaft DataBindings binden. Dann generiert der Formular-Designer den passenden Code für Sie.

+0

Joes hat Recht, eigentlich sollte man die Designerdatei nicht manuell verändern! – Enyra

4

Es ist mir nicht ganz klar, was Sie erreichen wollen, aber normalerweise, wenn Sie die Strings vermeiden wollen, die alle in die Designer-.cs-Datei codiert sind, verwenden Sie eine Ressourcendatei, in die die Strings geladen werden vom Start weg.

Wenn Sie die Eigenschaft "localizable" des Formulars auf "true" setzen, glaube ich, dass alles automatisch in Ressourcen endet. Auf der anderen Seite bin ich bei Windows Forms alles andere als Experte, also nehmen Sie das alles mit einer Prise Salz, bis Sie es fertig haben :)

+1

lol @ "weit von Experte" – inspite

+1

Während ich nicht sagen würde, ich bin ein ziemlich Neuling in WinForms, ich bin wirklich kein Experte durch eine sinnvolle Definition. –

1

Welches Problem versuchen Sie zu lösen? Wenn Sie versuchen, die Lokalisierung zu implementieren, sehen Sie sich die Lokalisierungsfunktionen an, die mit .NET und mit Satellitenassemblys geliefert werden.

Wenn Sie versuchen, die Anpassung zu lösen, sehen Sie sich die Anpassungsoptionen in .NET mit dem Einstellungs-Editor an.

Warum müssen Sie konstante Zeichenketten verwenden?

+1

Ich habe ein Formular mit vielen Tasten und Menüpunkten darauf. Basierend auf der Version unseres Produkts muss ich verschiedene Schaltflächen aktivieren/deaktivieren. Die Art, wie dies in der Vergangenheit gemacht wurde, besteht darin, eine Liste von Zeichenfolgen (Schaltflächennamen) zu führen und diese zu verwenden, um zu prüfen, ob eine bestimmte Schaltfläche aktiviert/deaktiviert werden sollte. Die Konstantenzeichenfolgen wurden in die Datei .designer.cs eingebettet, was zwar funktioniert, aber den Designer unbrauchbar macht. – TheSean

+0

Das erklärt nicht, warum Sie diese konstanten Zeichenfolgen als Platzhalter verwenden würden, wenn die Zeichenfolgen die Namen der Schaltflächen enthalten. –

1

Ihre zweite Methode ist die beste Wette. Weil Sie nicht davon ausgehen können, dass der Designer Ihre Änderungen immer beibehält, und oft bläst er sie einfach weg. Sie werden Ihre Kontrolländerungen in Page_Init Event-Methode machen wollen. Dadurch können Ihre Änderungen im Designer angezeigt werden.

http://msdn.microsoft.com/en-us/library/system.web.ui.control.init.aspx

Auf diese Weise können Sie Konstanten in Ihrer aktuellen Code-Behind-Klasse zu halten, die Sie kontrollieren und die Kontrollen werden so, wie Sie und Sie die Dinge kontrollieren können Sie ändern wollen eingeleitet werden nur wollen.

Update: Tut mir leid, habe nicht realisiert, das war WinForms. In WinForms ist es sogar noch einfacher, weil Sie Ihre Steuerelemente einfach im Konstruktor registrieren, nachdem die Steuerungsinitialisierung aufgerufen wurde.

+0

Danke, aber ich benutze nur winforms. Es muss jedoch einen ähnlichen Event-Handler geben. Ich bin nicht sehr vertraut damit, wie Benutzersteuerelemente im Designer gerendert werden, aber ich werde es mir ansehen. – TheSean

+0

Sie möchten es eigentlich nur im Konstruktor ausführen, nachdem die Steuerelemente initialisiert wurden. –

Verwandte Themen