transparent picturebox



  • Schau mal hier:
    http://support.microsoft.com/kb/943454

    Transparent controls in WinForms are transparent relative to their parent, not to other controls. Transparency in WinForms is more akin to camouflage than true transparency. A transparent control doesn’t actually let you see the control behind it through the form. It asks its parent to draw its own background on the "transparent" control. This is why a transparent control shows the form behind it, but covers up any other controls.

    Demnach solltest Du also dafür sorgen, dass das Eltern-Control von "picturebox2" gleich "picturebox1" ist.



  • sry konnte gestern nicht antworten

    in dem link steht drin, unten bei properties, das es nur diese NET-Versionen unterstützt(oder irre ich mich da!?) :

    Microsoft .NET Framework 1.0
    Microsoft .NET Framework 1.1
    Microsoft .NET Framework 2.0
    Microsoft .NET Framework 3.0

    jedoch habe ich net 4.0 .trotzdem habe ich mir die seite durchgelesen, aber sie hat mir nicht weitergeholfen

    wenn ich noch folgen kann dann benutzen sind wir immer noch bei der " picturebox2->SetStyle(ControlStyles::Opaque = true) " sache oder bei etwas ganz neuem?



  • niv schrieb:

    wenn ich noch folgen kann dann benutzen sind wir immer noch bei der " picturebox2->SetStyle(ControlStyles::Opaque = true) " sache oder bei etwas ganz neuem?

    Wie theta schon angemerkt hat, kannst Du die Funktion** SetStyle() leider nicht "von außen" aufrufen, da sie protected **ist.

    Die einzige Möglichkeit, um** SetStyle() **an einem PictureBox-Objekt aufzurufen wäre, eine eigene Klasse von der PictureBox-Klasse abzuleiten. Aber das ist vllt gar nicht sinnvoll/erforderlich.

    Lies doch mal das Zitat aus MSDN, das ich weiter oben schon gepostet habe, der erste Satz sagt schon alles:

    Transparent controls in WinForms are transparent relative to their parent, not to other controls. Transparency in WinForms is more akin to camouflage than true transparency. A transparent control doesn’t actually let you see the control behind it through the form. It asks its parent to draw its own background on the "transparent" control. This is why a transparent control shows the form behind it, but covers up any other controls.

    Transparente Elemente sind bei WinForms also nur in dem Sinne "transparent", dass sie ihren Hintergrund von ihrem jeweiligen Eltern-Element zeichnen lassen.

    Solange das Eltern-Element von "pitcurebox2" das Hauptformular und nicht die "picturebox1" ist (was ich vermute, aber nur Du kannst es nachprüfen!), wird es demnach nicht so funktionieren, wie Du es haben willst...



  • wie würde das als code aussehen
    denn ich habe grad keine ahnung wie ich das in einen code "umwandeln" könnte.



  • niv schrieb:

    wie würde das als code aussehen
    denn ich habe grad keine ahnung wie ich das in einen code "umwandeln" könnte.

    Falls Du Deine GUI in einem graphischen Editor entwirfst, sollte es bereits dort eine Möglichkeit geben, das Eltern-Control für jedes einzelne Control festzulegen. Bin jetzt kein Winforms-Experte, aber normalerweise sollte es doch irgendwo im Editor eine Baum-Ansicht geben, wo man sehen kann, wie die Controls zueinander in Beziehung stehen - ähnlich dem Objekt Inspektor im Qt Designer. Ansonsten musst Du es halt zur Laufzeit (sprich: im Code) über das** Parent **Property setzen...



  • vielleicht habe ich mich nicht richtig ausgedrückt oder du hast es falsch verstanden ^^.

    das 7_10.png sieht garnicht nach dem editor den ich habe. ich benutze visual c++ 2010 express

    bei mir sieht das ganze so aus:

    http://fs1.directupload.net/images/141121/temp/3epjlj6x.png

    das rote soll da sein wo es blaugrün ist und transparent sein.das blaue(rechts) ist unwichtig.und unten rechts bei eigenschaften gibt es nichts mit eltern-control, oder irre ich mich da



  • niv schrieb:

    vielleicht habe ich mich nicht richtig ausgedrückt oder du hast es falsch verstanden ^^.

    das 7_10.png sieht garnicht nach dem editor den ich habe. ich benutze visual c++ 2010 express

    bei mir sieht das ganze so aus:

    http://fs1.directupload.net/images/141121/temp/3epjlj6x.png

    Ich habe auch gar nicht behauptet, dass Dein Editor genau so aussieht 😉

    Ich habe bloß gesagt, dass, sofern Du Deine GUI mit einem graphischen Editor entwirfst, es irgendwo eine Baum-Ansicht geben sollte, wo man die Eltern-Kind-Beziehung zwischen den einzelnen Controls sehen/editieren kann - also so ähnlich wie der "Objekt Inspektor" im Qt Designer. Wie das Äquivalent zum "Objekt Inspektor" in Visual Studio respektive Winforms heißt, weiß ich nicht. Wie schon gesagt, ich bin kein ausgewiesener Winforms Experte...

    niv schrieb:

    und unten rechts bei eigenschaften gibt es nichts mit eltern-control, oder irre ich mich da

    Bei allen GUI Editoren, die ich bisher verwendet habe, sei es nun der Qt Designer oder Borland Delphi, gibt es für diesen Zweck eine separate Baum-Ansicht.

    Bei Delphi sieht das ganze zum Beispiel so aus:
    http://i.imgur.com/1Gm7wJg.png



  • so meine frage ist immer noch ungeklärt ^^
    wie würde das als code aussehen?



  • niv schrieb:

    so meine frage ist immer noch ungeklärt ^^
    wie würde das als code aussehen?

    In etwa so?

    Control1.Parent = Control2;
    

    Aber nochmal: Wenn Du die Eltern-Kind-Zuordnung direkt im GUI-Designer so festlegst, wie Du sie haben möchtest, sollte dieser Schritt unnötig sein.



  • wenn ich jetzt pictureBox1->Parent = pictureBox2 eingebe, oder umgekehrt,passiert nichts.es kommt auch kein fehler



  • Hat ihm keiner mehr geantwortet? Ich hab das selbe Problem gehabt. Bei mir hat es wie folgt funktioniert; "niv" hat lediglich nicht die C++ üblichen exakten Objekt-Bezüge beachtet:
    this->pictureBox2->Parent = this->pictureBox1;

    Ab VC Express 2008 funzt das. Manipulation von "Opaque" in Art von
    this->SetStyle( ControlStyles::Opaque, true );
    ist bei mir unnögig gewesen irgendwie. ^^

    Nur ist nun zu beachten daß die Koordinaten nicht mehr stimmen, da das Parent ja nicht mehr die Form ist, sondern die pictureBox1. Sind also relative Offsets im Forms Designer. Ich weiss ja nicht was er machen möchte, aber für Games wäre pictureBox1 ja wohl eh das gesamte Window.

    PS: ihr mixt hier wild C# und C++ (Control1.Parent VS Control1->Parent)


Anmelden zum Antworten