| 

.NET C# Java Javascript Exception

2
Ich möchte in meiner Anwendung so eine Art Ampel einbauen. Der User ruft ein Form in der Anwendung auf, in dem etliche Einstellungen angezeigt werden. Für die Einstellungen gibt es 3 Zustände, die im Wesentlichen dem Rot, Gelb und Grün der Verkehrsampel entsprechen.

Die einfachste Methode (aber optisch leider überhaupt nicht ansprechend) wäre natürlich, die Schriftfarbe eines Labels entsprechend zur Laufzeit zu setzen.

Am Liebsten wäre es mir, wenn ich neben dem Label eine Grafikbox habe, in der entweder eine Ampel oder 3 verschiedene Symbole (je nach Zustand) angezeigt werden können (also z. B. Stoppschild oder grünen Haken). Es kann auch einfach nur ein Kreis sein, der seine Farbe zur Laufzeit anpasst; die Gestaltung ist mein Problem und kann auch ganz anders aussehen. Kann man das ziemlich kurz und (aus Sicht der Rechenzeit) schnell programmieren?
30.08.2011
muffi 1,4k 1 9
2 Antworten
4
Das lässt sich gut mit einem User-Control realisieren, das die entsprechenden Eigenschaften erhält. Das User-Control besteht aus einem Label und deiner graphischen Komponente. Dadurch ist das Control in deinem Programm Wiederverwendbar.
Das gilt (da du .net angegeben hast) für alle Oberflächentechnologien wie WinForms, WPF, Silverlight.

Update:
Das Grundgerüst von Florian sieht schonmal gut aus.
Für Winforms kannst du folgendes machen:
- neues Usercontrol erzeugen
- Label daraufziehen
- PictureBox dazu
- ImageList dazu
- Bilder in ImageList laden
- je nach Status wird das entsprechende Bild der PictureBox zugewiesen:
PictureBox1.Image = ImageList1.Images(0)

- Eigenschaften oder Methoden für LabelText und Status in das Usercontrol bzw. nur Status, wenn das Usercontrol in deinem Beispiel die drei Texte beinhaltet
- fertig!
30.08.2011
Jürgen Luhr 7,1k 1 9
Im Moment habe ich (noch) vb.2005 EE. Ich werde mich wohl mal nach einem Tutorial umsehen müssen über UserControls, damit habe ich noch nie etwas gemacht. Danke schon mal!
muffi 30.08.2011
Ganz einfach: Rechte Maustaste auf dein Projekt im SolutionExplorer -> Add -> UserControl
Dein Usercontrol taucht danach in der ToolBox unter General auf und du kannst es wie jedes andere Steuerelement verwenden.
Jürgen Luhr 30.08.2011
Also hört sich wirklich einfach an. Wenn das morgen dann auch noch so funktioniert, wie ich mir das denke, gibts einen grünen Haken. Ist nur das Problem, dass ich nur einem dem Haken geben kann - aber wem von Euch beiden? :-/
muffi 30.08.2011
Der grüne Haken kommt hierher. Die bisherige Architektur des Tools hat im Prinzip tatsächlich nur ein kleines Ding gefehlt: die ImageList! Ich kann damit sogar auf die UserControls verzichten. Danke!
muffi 31.08.2011
2
Hallo muffi,

hab grad kein Studio zur Hand, aber als Einstieg könnte folgendes Codebeispiel (WinForms) helfen. Ist in C#, aber hab heut morgen gelernt, dass es da ein Tool gibt, das C# nach VB.NET konvertieren kann (http://www.developerfusion.co.uk/utilities/convertcsharptovb.aspx)

public enum States
{
Ok,
Warning,
Error
}

public class TriStateImageBox : PictureBox
{
// Mit den einzelnen Properties funktioniert das auch gleich im Forms Designer
public Image OkImage { get; set; }
public Image WarningImage { get; set; }
public Image ErrorImage { get; set; }

public States CurrentState { get; private set; }

public void SetState(States newState)
{
CurrentState = newState;
this.Image = //... Image entsprechend State zuweisen
}
}


Ist sicher nicht aller Tage Abend (das könnte man noch ein bisschen flexibler gestalten), aber das ist kurz und bzgl. Rechenzeit würd ich mir bei sowas auch keinen Kopf machen (außer Du packst du Gigabyte große Images rein). Falls Du wirklich in Performanceprobleme laufen solltest, dann kümmere Dich dann (und nicht jetzt) darum ("Premature optimization is the root of all evil").

Viel Erfolg,
Florian
30.08.2011
ffordermaier 8,4k 3 9
Witzig, die Seite zum Konvertieren benutze ich auch gerne. Aber irgendwie klingt Deine Lösung ganz gut... werde mir das morgen mal in Ruhe ansehen. Danke schon mal!
muffi 30.08.2011
Sieht gut aus. Ich habe meine Antwort ergänzt und würde eine ImageList empfehlen. +1
Jürgen Luhr 30.08.2011
Danke. Ich hab halt die Image Properties gewählt, weil man sie dann gleich direkt im VS PropertyGrid im Designer auswählen kann. Ist halt so auf drei Bildchen begrenzt, daher ist eine ImageList sicher hilfreich. Wenn man dann z.B. ImageIndex auf Enum mapped, ist man schon ziemlich weit (am Besten ableiten und auf den Enum typisieren, um Fehler im Mapping zu verhindern, aber das ist minimaler Aufwand und das Control für 1 bis n Zustände wiederverwendbar). Gute Idee, das mit der ImageList (+1).
ffordermaier 30.08.2011

Stelle deine .net-Frage jetzt!