none
UserControl auf PictureBox RRS feed

  • Frage

  • Hallo Leute,
    ich habe in eine PictureBox - welche sich auf einer Form befindet - ein Bild geladen.
    Nun habe ich ein UserControl (BackColor = Transparent) auf diese PictureBox gelegt.
    Eigentlich sollte es so sein, dass ich das UserControl gar nicht sehe, weil dieses ja auf Transparent geschaltet ist.
    Statt das Bild in der PictureBox hinter dem UserControl zu sehen, sehe ich sozusagen durch das Bild hindurch auf die Form selbst.
    Wie kann ich es realisieren, dass ich das Bild hinter dem transparenten UserControl sehe und nicht die Form.

    Vielen Dank im Voraus
    Christian Tauschek


    Christian Tauschek
    Dienstag, 14. Dezember 2010 19:29

Antworten

Alle Antworten

  • Hallo Christian,

    welchem Zweck soll das Vorgehen dienen?
    Die Kombination einer PictureBox mit vorgelagertem UserControl ist doch ungewöhnlich.

    Wenn  "nur" ein Bild im Hintergrund zu sehen sein soll, wäre es sinnvoller
    die BackgroundImage Eigenschaft des Formulars (oder des UserControls) festzulegen.

    Grundsätzlich ist ein UserControl ein Container der von ScrollableControl abgeleitet ist,
    und das seinen eigenen Hintergrund "malt" und darunterliegende Steuerelemente verdeckt.

    Gruß Elmar

    Dienstag, 14. Dezember 2010 20:24
    Beantworter
  • Hallo Elmar,
    auf der Form befinden sich 2 oder mehrere Pictureboxen mit verschiedenen Bildern, die zur Laufzeit vom User geändert werden können.
    In diese Pictureboxen kann der User zur Laufzeit mit der Maus (Drag and Drop) UserControls platzieren.
    Dadurch habe ich das Problem, dass ich nicht wirklich mit dem BackgroundImage des Formulars arbeiten kann, wo das Ganze mit der UserControl-Transparenz funktionieren würde.
    Auch das Zuweisen eines Hintergrundbildes beim UserControl wäre nicht machbar, da das UserControl vom User in seiner Position verändert werden kann.

    mfg
    Christian Tauschek


    Christian Tauschek
    Dienstag, 14. Dezember 2010 21:21
  • Hallo Christian,

    ich kann aus Deiner Beschreibung nicht Sinn und Zweck der Übung erkennen.

    Eine PictureBox ist kein Container und warum wird darüber ein UserControl platziert?

    Gruß Elmar

    Mittwoch, 15. Dezember 2010 09:04
    Beantworter
  • Vielleicht ist die Idee aus der Tatsache heraus mutiert, dass eine PictureBox damals (zumindest in VB6 noch) als Container missbraucht werden konnte. :-)

    Das geht ja (zum Glück) nicht mehr.

    Für mich klingt seine Beschreibung so, als ob er Pictureboxen als Anzeige verwenden möchte, welches Usercontrol (aus einer Auswahl) nun dort gedropt wurde, also z.B. aus einer Baustein-Toolbox heraus. Also etwa man hat 4 Bausteine und möchte damit eine Reihe bauen. Man nimmt mit der Maus einen davon und platziert ihn auf einer Picturebox. Diese zeigt nun ein bestimmtest Bild an. Man hat mehr Pictureboxen (Plätze) als Bausteine (Auswahlsteine) zur Auswahl, müsste also irgendwie Kopien erzeugen, oder eben das Zielcontrol (in dem Fall die Picturebox) beim Droppen verändern.

    Kommt das der Idee nahe? Hab ich den Sinn verstanden? ;-)

    LG, Dennis.

    Mittwoch, 15. Dezember 2010 12:00
  • Hallo Dennis und Elmar,
    ja fast ist es so wie Dennis beschreibt. Im Prinzip ist in der PictureBox ein Plan (CAD-Plan eines Gebäudes) hinterlegt.
    Der User kann nun Controls von so einer Art ToolBox per Drag and Drop auf die PictureBox legen. Dieses Control kann beispielsweise ein Lampensymbol sein, welches er auf dem Plan dorthin platziert wo sich auch eine Lampe befindet.
    Klickt nun der User auf das Control, dann wird eine Code ausgeführt, der die Lampe ein/ausschaltet. Das Control selber besteht aus einem Lampensymbol (PictureBox), einem Text (Label) und diverse andere Anzeigen bzw. Einstellungen, da es nicht nur Lampen gibt sondern viele andere Geräte darstellen können soll.

    Was würdet Ihr für eine Klasse verwenden um diesen Anwendungszweck zu erreichen. Genausogut ginge natürlich auch eine Klasse, die von Panel abgeleitet ist, in der ich meine Controls, wie zB. PictureBox (für das Lampensymbol) oder TextBox (für den Namen) usw. platziere.

    mfg Christian Tauschek
    Christian Tauschek
    Mittwoch, 15. Dezember 2010 18:57
  • Hallo Christian,

    und mein Unverständnis ist auf meine langen Rückzug von VB 6
    und weitreichende Anpassung an .NET Gegebenheiten zurückzuführen ;-)

    Wie Dennis schon schreibt: Eine PictureBox ist kein geeigneter Container.
    In .NET ist es ein (sehr) einfaches Steuerelement (vergleichbar mit einem Label, Button usw.),
    das nichts weiter tut als als das eingestellte Bild auf dem ihm eingeräumten Platz anzuzeigen
    (und ggf. ein wenig zu skalieren).

    Für einen richtigen Container sollte man entweder direkt ein UserControl verwenden,
    das die Fokussteuerung (fürs Verschieben) usw. bereits beinhaltet, oder von ScrollableControl
    ableiten, wozu ich heute Dennis bereits geschrieben hatte:
    [VB2005] Paint-Ereignis / Invalidate / Window Maximize

    Willst Du ähnlich dem Forms Designer Unterstützung bieten, solltest Du Dir anschauen:

    (leider alles C#)

    Ist man mutig genug, so sollte man zu WPF greifen, wo Dinge wie Transparenz,
    das Skalieren von (Steuer-)Elementen, Zeichnen von unterschiedlichen Körpern
    deutlich umfassender gelöst ist, siehe z. B.:
    http://blogs.msdn.com/b/msdnat/archive/2008/04/18/wpf-diagram-designer.aspx

    Gruß Elmar

    Mittwoch, 15. Dezember 2010 20:26
    Beantworter