Exportieren (0) Drucken
Alle erweitern
Erweitern Minimieren

PictureBox-Steuerelemente mit Hotspot-Fähigkeiten versehen

Veröffentlicht: 30. Aug 2006

Von Dino Esposito

Große Ideen sind zeitlos. Vor langer Zeit demonstrierte Paul DiLascia im Microsoft Systems Journal einen intelligenten Trick , mit dem eine kontextbezogene QuickInfo über Bildern eingeblendet werden kann. Wenn der Benutzer die Maus über ein Bild bewegt, wird der Text des QuickInfo-Steuerelements aktualisiert, um den Namen der Abbildung wiederzugeben, auf die gezeigt wird.

Laden Sie den Code zu diesem Artikel herunter: CuttingEdge2006_07.exe (1.940 KB)

Wie kann ein QuickInfo-Steuerelement intelligent genug sein, um einen nicht rechteckigen Bereich zu unterstützen, der beispielsweise der natürlichen Form einer menschlichen Figur auf einem Gemälde präzise entspricht? Hotspots in Bildern sind nichts Neues, sie werden jedoch normalerweise durch allgemeine, leicht beschreibbare Formen definiert – Rechtecke, Kreise oder auch Polygone.

Paul löste das Problem auf geniale Weise durch das Laden von zwei Kopien des Bilds – das Originalbild und eine Hotspot-Zuordnung. Das ursprüngliche Bild wird in einer Bildfeldkomponente angezeigt. Das Zuordnungsbild bleibt ausgeblendet und wird dazu verwendet, die einzelnen Pixel des Originalbilds einer bestimmten Farbe zuzuordnen. Das Zuordnungsbild ist mit dem Original fast identisch, mit der Ausnahme, dass jeder Hotspotbereich mit einer Farbe gefüllt wird. Auf diese Weise entspricht jeder Hotspotbereich einer eindeutigen Farbe, und jede eindeutige Farbe kann mit einem QuickInfo-Text verknüpft werden. Vor dem Einblenden der QuickInfo wird der Pixel unter dem Mauszeiger dem entsprechenden Pixel in der Hotspot-Zuordnung zugewiesen. Die Farbe in der ausgeblendeten Kopie des Bilds wird der Hotspot-Liste zugeordnet, und der zugehörige Text wird daraufhin eingeblendet.

In der Ausgabe von „Cutting Edge“ für diesen Monat werde ich Pauls Trick auf das Standardsteuerelement PictureBox von Windows Forms anwenden, sodass dadurch eine kontextbezogene QuickInfo angezeigt werden kann und beim Klicken des Benutzers auf bestimmte Bereiche entsprechende Ereignisse ausgelöst werden können. Auf diese Weise können Sie ohne großen Aufwand anklickbare Zuordnungen implementieren, wenn Sie Bilder aus dem wahren Leben verwenden und diese nach Belieben skalieren.

Auf dieser Seite

So funktioniert der Trick
Entwerfen eines komfortableren "PictureBox"-Steuerelements
Definieren von Hotspot-Bereichen
Hinzufügen der erforderlichen Ereignisverarbeitung
Zusammensetzen der Einzelteile
Unterstützung für Datenbindung
Ein "ImageMap"-Steuerelement in ASP.NET
Der Autor

So funktioniert der Trick

Das Foto auf der linken Seite in Abbildung 1 wird dem Benutzer angezeigt. Das auf der rechten Seite bleibt ausgeblendet und wird dazu verwendet, schnell zu ermitteln, ob ein angeklicktes Pixel des angezeigten Bilds Hotspot-Bereichen zugeordnet ist, die in diesem Foto rot, lindgrün, zyan, magenta und gelb eingefärbt worden sind. Ich habe zur Verdeutlichung absichtlich ein Bild aus dem wahren Leben gewählt. Sie können praktisch jedes beliebige Bild verwenden und darin eine Zuordnung kontextbezogener Bereiche erstellen.

Für den Benutzer angezeigtes Bild und korrespondierendes Bild mit Hotspot-Farbbereichen
Abbildung 1 :  Für den Benutzer angezeigtes Bild und korrespondierendes Bild mit Hotspot -Farbbereichen

Lassen Sie uns kurz ein allgemeines Szenario betrachten. Der Benutzer möchte auf eine Weltkarte klicken, um eine bestimmte Region auszuwählen und dann die Verkaufszahlen einzusehen. Wie würden Sie das Klicken auf die verschiedenen Regionen feststellen? Sie können die Karte in Polygone unterteilen, die aus einer Abfolge von Punkten bestehen. Nachdem eine Region festgelegt wurde, kann mithilfe einer grafikbezogenen API-Funktion in Microsoft .NET Framework ermittelt werden, ob ein bestimmter Punkt dazugehört. Dieser Ansatz ist in ASP.NET-Anwendungen üblich, in denen die Implementierung durch das ImageMap-Steuerelement relativ einfach ist. Sie stoßen jedoch auf Schwierigkeiten, sobald die endgültige Bitmapgröße geändert wird. Wenn die Größe der Karte geändert wird, müssen alle Punkte für alle Regionen neu berechnet werden. Der Einsatz eines Skalierungsfaktors kann hilfreich sein, eine noch flexiblere Lösung wäre jedoch wünschenswert.

Die Verwendung eines zweiten Bilds hat zwei bedeutende Vorteile: Zum einen können die Grenzen der einzelnen Bereiche sorgfältiger festgelegt werden. Zum anderen ist das Bearbeiten von Bereichen trivial – es müssen lediglich bestimmte Bereiche mithilfe eines einfachen Grafikeditors wie Microsoft Paint eingefärbt werden (siehe Abbildung 2).

Auf einer Weltkarte farbig definierte Hotspots
Abbildung 2: Auf einer Weltkarte farbig definierte Hotspots

Bei der Verwendung von zwei Bildern werden Ressourcen, besonders im Zusammenhang mit Windows Forms-Anwendungen, sparsam genutzt. In ASP.NET ist die Belegung von Arbeitsspeicher beim Laden doppelter Bilder schon entscheidender. Glücklicherweise können Lösungen so entworfen werden, dass das Bild nur einmal im Cache gespeichert und für mehrere Anforderungen und Benutzer gemeinsam verwendet wird.

Mit dem PictureBox-Steuerelement von Windows Forms können Bilder in einer Vielzahl von Formaten aus einer Vielzahl von Quellen angezeigt werden. Dazu zählen bereits geladene Image-Objekte, extern gespeicherte Bilder unter bekannten URLs sowie Bilder auf der Festplatte. In .NET Framework 2.0 wurde PictureBox weiter verbessert, sodass ein temporäres Bild angezeigt werden kann, während das Hauptbild vom Steuerelement geladen wird, und ein Fehlerbild, wenn das ausgewählte Bild nicht verfügbar ist.

Wenn der Benutzer in .NET Framework 1.x auf das Bild klickt, wird vom Steuerelement das Ereignis Click ausgelöst. Dadurch wird jedoch lediglich eine Benachrichtigung über die Aktion des Benutzers gesendet, es werden keine zusätzlichen Informationen über die Position des Mauszeigers usw. bereitgestellt. Ereignis-Handler für das Ereignis empfangen ein Objekt der EventArgs-Basisklasse:

Sub PictureBox1_Click(ByVal sender As Object, _
                      ByVal e As EventArgs) _
    Handles PictureBox1.Click
    ...
End Sub

In Windows Forms 2.0 können Sie das neue Ereignis MouseClick nutzen, mit dem die Position des Mauszeigers zum Zeitpunkt des Klicks bereitgestellt wird:

Sub PictureBox1_MouseClick(ByVal sender As Object, _
                           ByVal e As MouseEventArgs) _
    Handles PictureBox1.MouseClick
    ...
End Sub

Wenn Sie eine kontextbezogene QuickInfo zum Bereich des Bilds unter dem Mauszeiger anzeigen möchten, können Sie auf gleiche Weise das Ereignis MouseMove innerhalb des Hostformulars behandeln, die Position verarbeiten und Aktionen festlegen.

Entwerfen eines komfortableren "PictureBox"-Steuerelements

Das PictureBox-Steuerelement, das ich in dieser Kolumne implementieren werde, umfasst beide Punkte. Es enthält eine Auflistung von Hotspot-Bereichen und löst Client-Ereignisse aus, wenn der Benutzer auf einen solchen Bereich klickt oder den Mauszeiger darüber bewegt. Die gesamte Programmierschnittstelle ist der Programmierschnittstelle des ImageMap-Steuerelements in ASP.NET 2.0 nachempfunden. Der Hauptunterschied ist, dass beim PictureBox-Steuerelement Hotspot-Bereiche anhand von Farben anstatt von Punkten definiert werden. Das neue PictureBox-Steuerelement wird vom integrierten Steuerelement Windows.Forms.PictureBox abgeleitet und enthält zwei grundlegende Eigenschaften: HotSpots und MapImage (siehe Abbildung 3).

Die Eigenschaft MapImage ist vom Typ Image und repräsentiert das Begleitbild des angezeigten Bilds, in dem Hotspot-Bereiche mit einer gebräuchlichen Palette von Farben markiert werden. Ein Bitmap-Objekt (ein GDI+-Standardobjekt) dient als Wrapper für Image. Es stellt Methoden zum Abrufen der Farbe eines bestimmten Pixels zur Verfügung.

Schauen Sie sich noch einmal die Weltkarte in Abbildung 2 an. Die Eigenschaft Image des PictureBox-Steuerelements wird an das obere Bild gebunden. Die neue Eigenschaft MapImage wird mit dem unteren Bild verknüpft. Die beiden Bilder müssen ein paar Anforderungen erfüllen. Zum einen müssen die Bilder dieselbe Größe haben. Zum anderen muss das Begleitbild in einem nicht verlustbehafteten Format wie BMP oder auch PNG gespeichert werden. JPEG-Bilder sollten vermieden werden, da es bei deren Komprimierung zu Farbangleichungen kommt. Wenn die Farbe einiger Pixel in einem Hotspotbereich geändert wird, funktioniert der gesamte Mechanismus zur Punkterkennung nicht mehr. GIF-Dateien sind geeignet, solange nur Farben innerhalb der Farbpalette zum Markieren von Hotspot-Bereichen verwendet werden. Andernfalls besteht wie bei JPEG-Bildern das Risiko von Farbangleichungen. Das angezeigte Bild hingegen kann in jedem beliebigen Format gespeichert werden.

Das PictureBox-Steuerelement von Windows Forms enthält eine SizeMode-Eigenschaft, mit der angegeben wird, wie das Bild angezeigt wird. Gültige Werte für diese Eigenschaft sind in der Enumeration PictureBoxSizeMode festgelegt. Die Standardeinstellung ist Normal. Dabei wird das Bild von der linken oberen Ecke des Steuerelements ausgehend dargestellt, und alle Teile des Bilds, die über den Bereich des PictureBox-Steuerelements hinausgehen, werden abgeschnitten. Im Gegensatz dazu wird beim Wert StretchImage das angezeigte Bild der Größe des PictureBox-Steuerelements angepasst. Dadurch tritt ein grundlegendes Problem in Bezug auf das erwartete Verhalten des erweiterten PictureBox-Steuerelements auf: Die Größe des Begleitbilds sollte um denselben Faktor geändert werden. Dies kann programmtechnisch mithilfe von GDI+-Klassen durchgeführt werden. Beispielsweise kann die Methode GetThumbnailImage in der Klasse Image oder, besser noch, die Methode DrawImage in der Klasse Graphics verwendet werden. Um das Verhältnis zu berechnen, wird die Größe des PictureBox-Steuerelements mit der Größe des Bilds verglichen. Beachten Sie, dass es in diesem Szenario gute Gründe gegen die Verwendung der Methode GetThumbnailImage gibt. Die Wiedergabetreue kann im Vergleich zum Originalbild sehr schlecht sein, und in einigen Szenarios kann das Bild sogar völlig unterschiedlich sein. Obwohl dies sehr unwahrscheinlich ist, wäre es ziemlich schwierig, das festzustellen. Das PictureBox-Steuerelement in diesem Beispiel bietet keine zusätzlichen Funktionen, wenn die Eigenschaft SizeMode einen anderen Wert als Normal annimmt. Wenn dies Ihren Anforderungen nicht entspricht, können Sie den Beispielcode zu diesem Artikel erweitern.

Um Wertänderungen der Eigenschaft SizeMode unmittelbar zu erfassen und zusätzliche Funktionen zu aktivieren, muss das Ereignis SizeModeChanged im Steuerelement verarbeitet werden:

Protected Overrides Sub OnSizeModeChanged(ByVal e As EventArgs)
    MyBase.OnSizeModeChanged(e)
    m_beSmart = (Me.SizeMode = PictureBoxSizeMode.Normal)
End Sub

Der Arbeitsmodus des PictureBox-Steuerelements wird von einem internen, privaten Member überwacht. Von diesem Member, der Variable m_beSmart im vorangehenden Codeausschnitt, wird false zurückgegeben, wenn die Eigenschaft SizeMode einen anderen Wert als Normal annimmt.

Definieren von Hotspot-Bereichen

HotSpots ist die zweite wichtige Eigenschaft des neuen PictureBox-Steuerelements. Es handelt sich dabei um eine Auflistung benutzerdefinierter Typen, wie in Abbildung 4 dargestellt wird.

HotSpots ist vom Typ HotSpotElementCollection. Dies ist ein generischer Typ, der vom Typ Collection (Of T) zusammen mit dem Typ HotSpotElement bezogen wird. Die Klasse HotSpotElement definiert einen farbigen, sinnvoll ausgewählten Bereich in einem Zuordnungsbild. In diesem Zusammenhang wird ein Hotspot-Bereich mit einer eindeutigen, numerischen ID, einer RGB-Farbe, einem Titel und einer Beschreibung festgelegt. Mit der Farbe wird der Bereich eindeutig identifiziert. Für die Erfassung von Mausklicks bietet die ID einen numerischen Wert, der auf dem Client geprüft und zum Festlegen von Aktionen verwendet werden kann. In den meisten Fällen würde die Farbinformation ausreichen, um den angeklickten Bereich eindeutig zu identifizieren. So gesehen ist die ID-Information redundant. In Szenarios mit umfangreicher Datenbindung, in denen Bereiche auf einer Karte mit der zugehörigen ID in der Back-End-Datenbank verknüpft werden sollen, kann sie jedoch vorteilhafter sein als Farben. Auf diese Weise ist die Farbinformation nicht mit Bereichsinformationen gekoppelt.

Titel und Beschreibung können auch eine andere Rolle übernehmen – sie können für eine kontextbezogene QuickInfo verwendet werden, die eingeblendet wird, wenn der Benutzer den Mauszeiger über das angezeigte Bild bewegt.

Die Eigenschaft HotSpots kann programmtechnisch oder deklarativ innerhalb des Visual Studio 2005-Designers gefüllt werden. Es ist recht angenehm, dass Visual Studio 2005 Auflistungseigenschaften automatisch erkennt und diese an den integrierten Auflistungs-Editor bindet (siehe Abbildung 5).

Bearbeiten der Auflistungseigenschaft HotSpots
Abbildung 5: Bearbeiten der Auflistungseigenschaft HotSpots

Vom standardmäßigen Auflistungseditor werden Auflistungselemente hinzugefügt und mit dem Text angezeigt, der sich aus der Methode ToString des Elements ergibt. Im Raster ganz rechts sind alle Eigenschaften des Elementtyps aufgeführt. Alle Eigenschaften können wie im übergeordneten Eigenschaftenraster von Visual Studio 2005 bearbeitet werden.

Wenn Sie mit der Entwicklung von ASP.NET-Steuerelementen vertraut sind, wissen Sie, dass im Designer eingegebene Änderungen nicht in die Codebehind-Datei designer.vb bzw. designer.cs übernommen werden. Wenn Sie mir nicht glauben, versuchen Sie es einfach. Ziehen Sie das neue PictureBox-Steuerelement in ein Formular, und füllen Sie die Auflistung HotSpots. Speichern Sie das Formular anschließend, und starten Sie es. Das PictureBox-Steuerelement verhält sich, als sei die Auflistung leer, und weder in der Datei designer.vb noch im Formular sind Hotspot-Elemente gespeichert. Warum ist das so?

Die Antwort auf das Problem ist, dass für die Auflistungseigenschaft HotSpots eine spezielle Designer-Serialisierungsrichtlinie gelten muss. Im Allgemeinen muss dies für alle Auflistungseigenschaften in benutzerdefinierten Windows Forms- und ASP.NET-Steuerelementen geschehen. Der Trick liegt im folgenden Attribut der Auflistungseigenschaft:

<DesignerSerializationVisibility( _
    DesignerSerializationVisibility.Content)>

Ohne dieses Attribut werden keine während der Entwurfszeit vorgenommenen Änderungen an der Auflistung in die Datei designer.vb in Windows Forms oder in die ASPX-Quellseite in ASP.NET übernommen.

Der Typ HotSpotElementCollection erbt vom generischen Typ Collection und erweitert diesen um zwei Suchmethoden – ContainsColor und FindHotSpot. Beide nehmen eine Farbe als Eingabe an und geben entsprechend ihrer jeweiligen Ergebnisse einen booleschen Wert oder ein HotSpotElement-Objekt zurück (schauen Sie sich nochmals Abbildung 4 an). Speziell von FindHotSpot wird, falls zutreffend, das HotSpotElement-Objekt zurückgegeben, das mit der angegebenen Farbe übereinstimmt.

Außerdem werden von der Klasse HotSpotElementCollection zwei Methoden – InsertItem und SetItem – überschrieben, um sicherzustellen, dass die Farbe innerhalb der Auflistung keine Konflikte verursacht.

Ausgestattet mit vollständiger Unterstützung für Hotspot-Bereiche können wir nun damit fortfahren, ein paar Ereignisse für das Hostformular zu implementieren. Ich werde zwei Ereignisse definieren – HotSpotFound und HotSpotClicked. HotSpotFound wird ausgelöst, wenn der Mauszeiger über einen Hotspot bewegt wird, HotSpotClicked wird ausgelöst, wenn der Benutzer auf einen Hotspot klickt.

Hinzufügen der erforderlichen Ereignisverarbeitung

Das Ereignis HotSpotFound wird mithilfe der neuen generischen Version des Typs EventHandler wie folgt deklariert:

Public Event HotSpotFound As EventHandler(Of HotSpotEventArgs)Sie haben die Datenstruktur von HotSpotEventArgs in Abbildung 4 gesehen. Hauptsächlich wird die Basisklasse EventArgs damit um zwei Eigenschaften erweitert – HotSpot und CancelTooltip. Die Eigenschaft HotSpot verweist auf den Hotspot-Bereich, der gefunden wurde oder auf den geklickt wurde. Die Eigenschaft CancelTooltip gibt an, ob die entsprechende QuickInfo im Fall von Mausbewegungen abgebrochen werden soll. Diese Eigenschaft entscheidet im Clientcode bezüglich der zum Hotspot angezeigten QuickInfo. Durch Verarbeitung des Ereignisses kann die QuickInfo vom Clientformular programmtechnisch geändert oder sogar abgebrochen werden.

Das Ereignis HotSpotClicked folgt einem identischen Schema.

Public Event HotSpotClicked As EventHandler(Of HotSpotEventArgs)In diesem Fall wird die Eigenschaft CancelTooltip jedoch nicht vom PictureBox-Steuerelement verwendet, wenn der Ereignis-Handler beendet ist. Alle Werte, die Sie der Eigenschaft im Ereignis-Handler zuweisen, werden vom PictureBox-Steuerelement einfach ignoriert.

Bei der Instanzierung wird vom PictureBox-Steuerelement ein eigener Handler für das Ereignis MouseClick registriert, wie Sie in Abbildung 3 sehen konnten. Der interne Handler, OnClickInternal, ist in Abbildung 6 dargestellt.

Wenn im Client-Bereich des PictureBox-Steuerelements auf einen Punkt geklickt wird, empfängt das Steuerelement die Client-Koordinaten des Punkts von der Ereignisdatenstruktur – der Klasse MouseEventArgs.

Im nächsten Schritt wird nach der Farbe des Pixels an der angegebenen Position gesucht. Beachten Sie, dass das interne Ereignis MouseClick auch dann ausgelöst wird, wenn der Benutzer außerhalb des Bildrands klickt. Diese Klicks müssen erfasst und ohne Aufruf von GetPixel in der Klasse Bitmap zurückgegeben werden. Wenn GetPixel mit Koordinaten aufgerufen wird, die außerhalb der Bildgröße liegen, wird eine Ausnahme ausgelöst. GetPixel ist eine Methode der Klasse Bitmap, die die Farbe des Pixels an der entsprechenden Position zurückgibt. Daraufhin wird nach einem mit dieser Farbe verknüpften Bereich gesucht. Wenn die Suche erfolgreich ist, wird das entsprechende HotSpotElement-Objekt zurückgegeben:

Dim elem As HotSpotElement = HotSpots.FindHotSpot(clr)

Mit der Methode FindHotSpot der Hotspot-Auflistung werden Informationen zur gefundenen Region abgerufen.

Was geschieht jedoch, wenn Ihr Bild Pixel mit derselben Farbe wie eine Ihrer Hotspot-Farben enthält? Wenn der Benutzer den Mauszeiger exakt über diesen Pixel bewegt, tritt ein Konflikt auf. Um dies zu vermeiden, sollten Sie für Hotspot-Bereiche idealerweise Farben verwenden, die im Bild sonst nicht vorkommen. Mit über 16 Millionen verfügbaren Farben ist es zwar möglich, aber nicht einfach, eine nicht verwendete Farbe zu finden. Aufgrund der Art und Weise, wie Farbpixel in einem realen Bild verteilt sind, ist die ausgewählte Farbe meistens jedoch nur in einzelnen Pixeln zu finden, und es tritt kein Problem auf.

Eine elegantere Lösung wäre die Reservierung einer Farbe (z. B. weiß oder transparent) für alle Teile des Bilds, in denen kein Bereich definiert ist. Auf diese Weise färben Sie das gesamte darunter liegende Bild einheitlich mit Ausnahme der Hotspot-Bereiche. Die reservierte Farbe kann als öffentliche Eigenschaft offen gelegt werden, um Entwicklern die Entscheidung darüber zu überlassen.

Zusammensetzen der Einzelteile

Mit dem PictureBox-Steuerelement können Sie Hotspot-Bereiche in angezeigten Bildern definieren. Alle Bereiche werden in einer Kopie des Bilds – dem Zuordnungsbild – mit einer eindeutigen Farbe markiert, die nach Möglichkeit im Rest des Bilds nicht vorhanden ist. Nachdem Sie das PictureBox-Steuerelement in ein Formular gezogen haben, legen Sie das Zuordnungsbild fest und füllen die Hotspot-Auflistung. Das Steuerelement wird von der Hotspot-Auflistung über die Hotspot-Farben im Bild informiert. Wenn der Benutzer auf einen Hotspot-Bereich klickt, wird in der Standardeinstellung das Ereignis HotSpotClicked ausgelöst. Es folgt ein typischer Ereignis-Handler:

Sub PictureBox1_HotSpotClicked(ByVal sender As Object, _
                               ByVal e As HotSpotEventArgs) _
        Handles PictureBox1.HotSpotClicked
    MessageBox.Show(e.HotSpot.Description)
End Sub

Wenn das PictureBox-Steuerelement über die Fähigkeit verfügt, Mausbewegungen aufzuzeichnen, wird ein interner Handler für das Ereignis MouseMove registriert. Nach dem Auslösen des Ereignisses wird vom Steuerelement eine QuickInfo angezeigt. Titel und Text der QuickInfo geben normalerweise die im Hotspot-Element festgelegten Werte wieder. Diese Parameter können jedoch im Clienthandler geändert werden. Wie bereits erwähnt, kann die QuickInfo auch abgebrochen werden:

RaiseEvent HotSpotFound(Me, args)
If Not args.CancelTooltip Then
    m_tooltip.ToolTipTitle = args.HotSpot.Title
    m_tooltip.SetToolTip(Me, args.HotSpot.Description)
Else
    HideTooltip()
End If

In Abbildung 7 ist das Steuerelement in Aktion mit der angezeigten Standard-QuickInfo dargestellt. Der Titel der QuickInfo wird programmtechnisch geändert, und die Beschreibung des Hotspot-Bereichs wird außerdem in der Statusleiste des Formulars angezeigt:

Sub PictureBox1_HotSpotFound(ByVal sender As Object, _
                             ByVal e As HotSpotEventArgs) _
        Handles PictureBox1.HotSpotFound
    Info.Text = e.HotSpot.Description
    e.HotSpot.Title = "EMEA"
End Sub

Kontextbezogene QuickInfo auf einer Karte
Abbildung 7: Kontextbezogene QuickInfo auf einer Karte

Unterstützung für Datenbindung

Das integrierte PictureBox-Steuerelement verfügt über eine bindbare Eigenschaft mit dem Namen Image. Durch das Hinzufügen der HotSpots-Auflistung wächst der Bedarf für eine stärkere Form der Datenbindung. Es wäre beispielsweise von großem Nutzen, wenn die Auflistung von einer Datenbank aus gefüllt werden könnte, sodass Entwickler mit der Bearbeitung von Quelldateien verschont bleiben, wenn eine Farbe oder Beschreibung irgendwann geändert wird. Möglicherweise möchten Sie eine DataSource-Eigenschaft hinzufügen und deren Inhalt der HotSpots-Auflistung zuordnen, oder Sie möchten die HotSpots-Auflistung in eine Lese-/Schreibeigenschaft umwandeln, die programmtechnisch als Objekt festgelegt werden kann. Wenn Sie sich für die klassische Eigenschaft DataSource entscheiden, müssen außerdem ein paar Zuordnungseigenschaften definiert werden, um anzugeben, welche Felder der gebundenen Datenquelle bindbaren Eigenschaften der Hotspot-Elemente zugeordnet sind. Beispielsweise könnten Sie die Eigenschaften DataDescriptionField, DataTitleField, DataColorField und DataValueField verwenden, um Felder in der Datenquelle Hotspot-Elementen zuzuordnen. Bei DataColorField sind Sie dafür verantwortlich, einen Übersetzungsalgorithmus zu erfinden, der basierend auf einer Zeichenfolge oder einer Zahl, die in der gebundenen Datenquelle gespeichert ist, einen .NET Framework-Farbtyp generiert. Dies könnte leicht mithilfe der Klasse ColorConverter im System.Drawing-Namespace bewerkstelligt werden.

Die bindbare Eigenschaft Image des PictureBox-Steuerelements ist mit dem Attribut Bindable gekennzeichnet und wird zur Auflistung DataBindings hinzugefügt. Vielleicht möchten Sie dieses Verhalten auch auf die Eigenschaft MapImage erweitern. Um dies zu erreichen, können Sie das Attribut Bindable zur Eigenschaft MapImage im Quellcode des Steuerelements hinzufügen:

<Bindable(True)> _
Public Property MapImage() As Image
  ...
End Property

Ein "ImageMap"-Steuerelement in ASP.NET

Ich habe hier kontextbezogene PictureBox-Steuerelemente im Zusammenhang mit einer Windows Forms-Anwendung erläutert. Es ist jedoch leicht möglich, für ASP.NET ein ähnliches Steuerelement, ausgehend vom Steuerelement Image oder ImageMap, zu erstellen.

In ASP.NET verfügt das ImageMap-Steuerelement über ähnliche Verhaltensweisen wie die von mir in dieser Kolumne beschriebenen. Mit diesem Steuerelement wird eine Reihe von Hotspot-Bereichen definiert. Wenn der Benutzer auf einen Hotspot klickt, gibt das Steuerelement Daten zurück, oder es wird ein angegebener URL aufgerufen. Das ASP.NET-Framework enthält eine Reihe vordefinierter HotSpot-Objekte, wie die Klassen CircleHotSpot, RectangleHotSpot und PolygonHotSpot. Sie können auch von der abstrakten Klasse HotSpot ableiten, um Ihr eigenes benutzerdefiniertes Hotspot-Objekt zu definieren. In Situationen wie der hier beschriebenen kann dies hilfreich sein.

Senden Sie Ihre Fragen und Kommentare für Dino an cutting@microsoft.com (in englischer Sprache).

Der Autor

Dino Esposito ist Mentor von Solid Quality Learning und Autor von Programming Microsoft ASP.NET 2.0 (Microsoft Press, 2005). Dino arbeitet in Italien und ist ein weltweit gefragter Referent bei Branchenveranstaltungen. Sie können Dino mit einer englischsprachigen E-Mail an cutting@microsoft.com erreichen oder sein Weblog unter weblogs.asp.net/despos lesen.

Aus der Ausgabe Juli 2006 des MSDN Magazine.

Anzeigen:
© 2015 Microsoft