Teile des Programmhintergrunds transparent machen
-
Also mein Projekt nennt sich Bewerbung und in der Datei "Bewerbung.Designer.cs" im Bereich "InitializeComponents" habe ich es wie folgt eingebracht:
// // Bewerbung // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImage = global::Ausbildungsplatz.Properties.Resources.bg22; this.ClientSize = new System.Drawing.Size(797, 511); SetStyle(System.Windows.Forms.ControlStyles.SupportsTransparentBackColor, true); this.BackColor = System.Drawing.Color.Transparent; this.Controls.Add(this.bigfont); this.Controls.Add(this.regularfont); this.Controls.Add(this.smallfont); this.Controls.Add(this.button2); this.Controls.Add(this.button1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MaximizeBox = false; this.Name = "Bewerbung"; this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Bewerbung"; this.TransparencyKey = System.Drawing.Color.Transparent; this.Load += new System.EventHandler(this.Bewerbung_Load); this.ResumeLayout(false);
System.Windows.Forms ist zwar per using eingebunden, musste ich aber trotzdem davorschreiben.
Und nun bringt es mir folgende Fehler:
Die Methode "System.Windows.Forms.Form.SetStyle" konnte nicht gefunden werden.
Das Steuerelement unterstützt keine transparenten Hintergrundfarben.
Wobei zweiteres ja nur sagt, dass es nicht geklappt hat.Sorry für meine Unkenntnis der Fachbegriffe.
-
Du weisst aber schon, was ein Konstruktor ist?
InitializeComponents
ist eine Funktion, welche grundsätzlich vom Konstruktor aufgerufen wird. In derBewerbung.Designer.cs
hast du grundsätzlich überhaupt nichts verloren. Dieser Teil wird vollständig vom Designer kontrolliert und verwaltet. In diesem Bereich existiert normalerweise auch keinusing
und alle Bezeichner sind voll qualifiziert.Ich habe es gerade noch schnell selber getestet. Bei mir funktioniert es ohne Probleme, da sollte es auch bei dir funktionieren. Befolge einfach nur 1:1 die Anweisungen in der Dokumentation.
Du hast doch eine
Bewerbung.cs
:// ... using System.Drawing; // <- muss zwingend vorhanden sein using System.Windows.Forms; // <- muss zwingend vorhanden sein // ... namespace DeinNamensRaum { public partial class Bewerbung : Form { // ... public Bewerbung() // <- Konstruktor { InitializeComponent(); // Wie die Dokumentation es schreibt: SetStyle(ControlStyles.SupportsTransparentBackColor, true); this.BackColor = Color.Transparent; // ... } // ... } }
Grüssli
-
Gut, jetzt bekomme ich keinen Fehler mehr, aber der gewünschte Effekt tritt noch nicht in Kraft.
Es wird die BackColor "Control" gewählt, die im Eigenschaftenfeld des Entwurfs steht. Diese kann ich nicht in Transparent ändern, da dort ja die Ungültigkeitsnachricht kommt.
Im Designer.cs ist aber keine BackColor definiert.
Kann das sonst irgendwo noch stehen?
Danke für die Hilfe und deine Geduld mit mir
-
Schau dir bitte nochmals meinen Code an. Dort setze ich bereits
BackColor
aufColor.Transparent
. Im Designer musst du nichts auf Transparent setzen.Grüssli
-
Richtig, und trotzdem wird mir ein grauer Rand angezeigt...
Ich komme mir gerade vor wie der Kerl aus der Werbung "ich liebe Technik, sie mich nur nicht"...
-
Deffcon schrieb:
Richtig, und trotzdem wird mir ein grauer Rand angezeigt...
Und wo? Im Designer definitiv, aber wenn du die Anwendung startest, sollte kein Hintergrund vorhanden sein. Ausser du hast ein anderes Control über alles hineingesetzt.
Grüssli
-
Ich habe nochmal einen Screenshot gemacht.
http://img827.imageshack.us/img827/5295/unbenanntii.jpg
Da sieht man den "Rand".
Ich habe auch nochmal geschaut, ob ich einen Grund dafür finden könnte aber mir fiel nichts auf.
Ich habe mit der SuFu nach BackColor gesucht und habe nichts anderes gefunden.
-
Naja, ansonsten überschreib einfach
OnPaintBackground
und mach darin nichts. Ich weiss allerdings nicht, was das für Nebeneffekte auslösen könnte.Grüssli
-
N'Abend Dravere,
konnte den Befehl gestern nicht probieren, da ich an der Leiste operiert wurde.
Habe es eben getestet und bekomme wieder einen Fehler, der da lautet:Fehler 1 "Bewerbung.Bewerbung.OnPaintBackground(System.Windows.Forms.PaintEventArgs)" ist nicht als abstrakt, extern oder partiell gekennzeichnet und muss daher einen Text deklarieren.
Was für einen Text soll es deklarieren?
Sollte doch eher ein Befehl sein.Danke
-
Deutsche Fehlermeldungen ... brrrr
Aber das klingt so, als hättest du keinen Codeblock hingeschrieben.protected override void OnPaintBackground(PaintEventArgs args) { // prevent }
Sag mal, seit wie langem programmierst du in C# und was probierst du gerade als Programm zu erreichen? *mal neugierig ist*
Grüssli
-
Okay, jetzt hat es Wirkung gezeigt und macht den gesamten Hintergrund schwarz.
Kurz zum Projekt:
Ich arbeite seit ca 2 Monaten mit C#, habe damit ein paar Programme erstellt, wie zum Beispiel einen Taschen- und Währungsrechner und Mathelernprogramme.Das jetzige Projekt wird Bestandteil meiner Bewerbung als Fachinformatiker für Anwendungsentwicklung an der TU Dresden.
Ich reiche dazu eine normale Bewerbung auf Papier ein und ein Programm, indem man zum einen die Bewerbung als C# Programm anklicken kann und als Website.
Die Website habe ich soweit fertig (Inhalte füge ich zum Schluss ein). Die kannst du unter http://emohair.em.funpic.de/ ansehen. Kommt natürlich noch auf einen Werbefreien Webspace.
Und die Page und das Programm sollen eben gleich aussehen.Liebe Grüße aus Dresden
-
Deffcon schrieb:
Okay, jetzt hat es Wirkung gezeigt und macht den gesamten Hintergrund schwarz.
Hmmm, welche Windows Version benutzt du?
Du programmierst erst seit 2 Monaten in C# und willst deine Bewerbung darin abgeben? Wieso muss die Bewerbung in C# gleich aussehen? Finde ich irgendwie unpassend dies in C# mit WinForms zu lösen. Naja, nur so meine Meinung
Grüssli
-
Ich bin in WinXp unterwegs. 32Bit Version und SP3.
Es muss nicht gleich aussehen, ich wollte es nur so realisieren, dass ich das gleiche Layout in 2 Verschiedenen Programmierumgebungen darstellen kann.
Und ich möchte damit nur zeigen, dass Vorkenntnisse vorhanden sind.
Ich lege großen Wert darauf einen der 5 Ausbildungsplätze dort zu erhaschen.
-
Kennt vielleicht jemand noch einen anderen Weg meine Anwendung in die Form zu bekommen?
-
Bei mir funktioniert das mit SetStyle und BackColor = Color.Transparent auch nicht (habs schon in de ctor geschrieben)...
Eine andere Möglichkeit ist mittels TransparencyKey (hab den MSDN-link leider gerade nicht zur hand) Da ich aber auf meiner Form Fotos anzeigen will, kann ich keine Farbe Transparent machen, weil auf Fotos grundsätzlich jede Farbe vorkommen kann.Sind WinForms überhaupt geeignet, solche Dinge zu realisieren? Oder sollte ich mich besser in WPF einarbeiten? Oder gibt es noch andere, evtl. bessere Lösungen?
mfg Argus Magnus
:: edit ::
Das könnte er sein
-
Diesen Link hatte ich auch schon.
Hat jedoch bei mir auch nicht gewirkt, da mit dem Transparency-Key Farben transparent gemacht werden, die auf der Form angebracht werden - nicht jedoch Teile der Form selbst.
-
doch, dass hat bei mir funktionirt. Ich habe für den TransparencyKey und meinen Hintergrund dieselbe Farbe gewählt und meine Form war tatsächlich Transparent. Aber leider ist dann jedes Pixel auf der Form (und sei es auf einem Foto das in einer PictureBox angezeigt wird), welches diese Farbe hat, transparent. Was nicht dem gewünschten Effekt entspricht
-
Möglicherweise kannst du für die PictureBoxen einen anderen TransparencyKey nutzen? Oder ihn dafür ausstellen?
Oder du nimmst einfach so ein krasses lilablassblau, was mit hoher wahrscheinlichkeit nicht in den Bildern vorkommt.//EDIT:
Du kannst ja einfach mal R255, G0, B255; Du ersetzt ja nicht den Farbton, sondern genau diese Farbe, falls sie vorkommt. Müsste ja eigentlich funktionieren.
-
Ich habe ein paar Tests laufen lassen auch auf WinXP. Das mit
SetStyle
scheint wirklich nicht zu funktionieren unter WinXP SP3. Ich habe es jedenfalls auch nicht zum laufen gebracht. Die Methode mitTransparencyKey
undOnPaintBackground
haben allerdings funktioniert.Wahrscheinlich machst du irgendwo irgendetwas falsch. Allerdings habe ich leider keine Zeit mich durch einen fremden Quellcode zu wühlen. Tut mir leid.
Wenn er nicht zu gross ist, kannst du ihn ja trotzdem mal als zip File hier anbieten. Vielleicht nimmt sich jemand anderes die Zeit. Aber die Chancen sind meistens gering.Grüssli
-
Also mit der onpaintbackground Methode wird bei mir der Hintergrund schwarz. Wenn ich dann den TransparencyKey auf schwarz stelle ist alles transparent, ausser die Buttons und Labels.
Wie kann man den "Rang" von Buttons und Labels bearbeiten, also einstellen welches oben angezeigt wird und welches darunter verschwindet?
Ich will so mal ein bisschen rumprobieren.
__________________________________________________________________________________
EDIT: okay, habe nun rausgefunden, wie man den Z-Index ändert.