Hallo Leute 😃
Tut mir leid für den etwas vielleicht nicht völlig verständlichen Titel aber weiß nicht wie ich das Problem anders betiteln soll 😒
Es geht darum, dass sobald ich in den Eigenschaften für meine Form ein Bild als Hintergrund anlege und das Bild der Form anpasse flattert mein Programm beim debuggen/Ausführen.
Weiß jemand ein Ansatz wieso es so Flattern kann? oder noch besser wie ich das unterbeinden kann?
Sobald kein Hintergrundbild festgelegt ist Funktioniert es wieder ohne flattern. Für mich ein Ratloses Problem.
Hi Gh0st21,
ein paar mehr Infos wären nicht schlecht: Wie groß ist das Bild? Wie legst du das Hintergrundbild fest? Verwendest du WinForms oder WPF? Versetze dich mal in die Lage derjenigen, die dir helfen wollen.
Christian
Weeks of programming can save you hours of planning
MrSparkle : Ok, tut mir leid. Hier mal ein paar mehr Information.
Ich verwende WinForms - Das Bild ist 1600 x 1200 pixel, 1,15mb und das Bild lege ich über das Eigenschafts-Fensters fest also lade es nicht direkt im Code hoch
PS: Ich nutzte das Visual Studio 2013
Wenn das alle Infos sind, die du uns geben kannst, kann ich nur sagen: Bei mir funktioniert das.
Kannst du denn bestätigen, daß ein anderes (kleineres) Bild auch ruckelt? Was passiert, wenn du das Bild in einer PictureBox verwendest? Hast du schon [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox) ausprobiert? Wird das Bild skaliert und wenn ja, was passiert, wenn die Skalierung nicht verwendet wird? Was hast du sonst alles ausprobiert?
Christian
Weeks of programming can save you hours of planning
Flickern tritt durch sehr kurze Invalidate Intervalle auf also wenn das ContainerControl permanent neugezeichnet wird. Ich gehe mal davon aus da liegen noch Controls auf der Form die entweder (timerbasiert) bewegt werden oder von sich aus ein permanentes neuzeichnen auslösen.
Mittels "C# Flicker Free BackgroundImage" und einer sogenannten Suchmaschine(eine Erfindung aus Amerika) findet man jede Menge Lösungen auf dem Silbertablett serviert.
Sowas zum Beispiel:
Die Erfinder der Suchmaschine sind Kanadier, keine Amerikaner (was hier wohl implizit die USA suggeriert); FYI.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ja allerdings wird das Bild ja nicht erst neu erstellt sondern ist von anfang an fest gelegt.
(oder ich verstehe dich falsch) 😕
So lege ich mein HintergrundBild fest.
this.BackgroundImage = Warenwirtschafts_System.Properties.Resources.Hintergrund;
Was ich noch eingeführt habe ist, sobald man mit dem Maus über die Buttons geht, sich der Hintergrundbild auch verändert unzwar so
Festlegen, welcher Button welches Hintergrundbild haben soll.
public WWS()
{
InitializeComponent();
this.BackgroundImage = Warenwirtschafts_System.Properties.Resources.Hintergrund;
this.btnRechnung.BackgroundImage = Warenwirtschafts_System.Properties.Resources.btnR;
this.btnKasse.BackgroundImage = Warenwirtschafts_System.Properties.Resources.btnK;
this.btnKontakt.BackgroundImage = Warenwirtschafts_System.Properties.Resources.btnKon;
}
& so verändere ich den Hintergrundbild
private void showHover(object sender, EventArgs e)
{
// Wenn Maus über Button Rechnung ist
if(sender == btnRechnung)
{ this.btnRechnung.BackgroundImage = Warenwirtschafts_System.Properties.Resources.header; }
// Wenn maus über Button kasse ist
else if(sender == btnKasse)
{ this.btnKasse.BackgroundImage = Warenwirtschafts_System.Properties.Resources.header; }
// Wenn maus über Button Kontakt ist
else if(sender == btnKontakt)
{ this.btnKontakt.BackgroundImage = Warenwirtschafts_System.Properties.Resources.header; }
}
und sobald die Maus den Button verlässt setzte ich das Bild wieder zurück
private void showLeave(object sender, EventArgs e)
{
if (sender == btnRechnung)
{ buttonBack(sender); }
else if (sender == btnKasse)
{ buttonBack(sender); }
else if (sender == btnKontakt)
{ buttonBack(sender); }
}
private void buttonBack(object s)
{
this.btnRechnung.BackgroundImage = Warenwirtschafts_System.Properties.Resources.btnR;
this.btnKasse.BackgroundImage = Warenwirtschafts_System.Properties.Resources.btnK;
this.btnKontakt.BackgroundImage = Warenwirtschafts_System.Properties.Resources.btnKon;
}
Funktioniert zwar auch, aber es dauert ca 1 Sekunde, bis sich das Hintergrundbild verändert wen man mit der Maus drüber geht, sobald man allerdings mit der Maus den Button verlässt nimmt es ohne verzögerung den alten Hintergrundbild wieder an.
Hi Gh0st21,
das sieht mir nach der denkbar schlechtesten Umsetzung deiner Anforderungen aus. Warum verwendest du nicht einen Style mit einem Trigger, um das Hintergrundbild bei einem MouseOver zu verändern?
Das alles geht komplett ohne Code-Behind.
Christian
Weeks of programming can save you hours of planning