Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
BackgroundImage + BackgroundImageLayout = Stottern des Programms
Gh0st21
myCSharp.de - Member



Dabei seit:
Beiträge: 26

Themenstarter:

BackgroundImage + BackgroundImageLayout = Stottern des Programms

beantworten | zitieren | melden

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 :s

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.
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5.655
Herkunft: Leipzig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Gh0st21
myCSharp.de - Member



Dabei seit:
Beiträge: 26

Themenstarter:

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Gh0st21 am .
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5.655
Herkunft: Leipzig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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:

Dont Flicker ! Double Buffer !
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.928

beantworten | zitieren | melden

Die Erfinder der Suchmaschine sind Kanadier, keine Amerikaner (was hier wohl implizit die USA suggeriert); FYI.
private Nachricht | Beiträge des Benutzers
Gh0st21
myCSharp.de - Member



Dabei seit:
Beiträge: 26

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5.655
Herkunft: Leipzig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers