Teile des Programmhintergrunds transparent machen
-
Guten Tag,
ich habe bei einem Programm die Border und Systemleiste oben ausgeblendet, da ich diese selbst gestaltet habe und möchte nun die Ecken ausblenden.
Ich habe es erst mit dem Transparency Key versucht, welcher wohl aber nicht für Hintergründe gilt.
Danach habe ich eine PNG vom Hintergrund erstellt und dort die Ecken mit dem Hintergrundradierer von PS entfernt.
Das wird jedoch in C# mit der BackColor ersetzt, welche man nicht auf Transparent stellen kann.Kennt jemand einen Lösungsweg für mein Problemchen?
Grüße Deffcon
-
1. Forms oder WPF?
2. Was verstehst du unter Border?
3. Was für Ecken?Grüssli
-
Also es geht um den Hintergrund meiner Windows Form.
Mit Border meine ich den Formborderstyle, den ich auf none gesetzt habe, dass der eigentliche Rahmen mit den "minimize,help,exit" buttons ausgeblendet wird.Bei dem Hintergrundbild habe ich abgerundete Ecken, siehe hier:
http://img10.imageshack.us/img10/6803/bg2qj.jpg
Hinter den Rundungen ist ja noch die Farbe weiß, die Transparent werden soll.
-
Probier es mal damit:
http://msdn.microsoft.com/en-us/library/wk5b13s4.aspxGrüssli
-
Das klingt nach einer guten Lösung, allerdings versuche ich wohl den Code
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
an die falsche Stelle zu setzen.
Er bringt mir immer:
Fehler 1 Der Name "ControlStyles" ist im aktuellen Kontext nicht vorhanden.
Ich habe es im Designer.cs in den Block der Form geschrieben.
-
Im Block der Form? Auf der Seite steht, dass du es in den Konstruktor setzen solltest. Oder meinst du damit "Block der Form"?
Du solltest ein wenig mehr auf die Begriffe achten, dass verwirrt ziemlichFalls du es wirklich in den Konstruktor gepackt hast, dürfte das Problem wohl daran liegen, dass du nicht den Namensraum
System.Windows.Forms
perusing
eingebunden hast. Also entweder diesen noch einbinden oderControlStyles
mit dem vollqualifizierten Namen verwenden:System.Windows.Forms.ControlStyles
.Grüssli
-
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?