Frage zu Code



  • Mein behälter füllt sich nur immer bis 90 aber nicht zu 100.

    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            int height = 10;
    
            public Form1()
            {
                InitializeComponent(); 
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
    
                Graphics x = this.CreateGraphics();
    
                x.DrawRectangle(new Pen(Color.Blue), 30, 30, 70, 100);
    
                x.FillRectangle(new SolidBrush(Color.Blue), 30, 30, 70, height);
    
                height += 10;
    
              //würde ich hier height>110 machen dann würds funktionieren
                if (height > 100) { height = 0; this.Invalidate(); }
    
            }
        }
    }
    


  • Ja ?
    Was ist den genau deine Frage ?



  • alternativ zu

    if (height > 110)
    

    könntest du
    height = 0 ; //initialisieren
    dann hättest du beim ersten klick ein leeren contrainer
    und dein

    height += 10;
    erst nach der if Bedingung
    grüße



  • blurry333 schrieb:

    Mein behälter füllt sich nur immer bis 90 aber nicht zu 100.

    height steht auf 100.
    Dann klickst Du, das Rectangle wird voll ausgefüllt, height erhöht sich auf 110 und die Form wird wegen der erfüllten if-Abfrage neu gezeichnet (Invalidate). Und schon ist alles weg.

    Es ist totaler Mist in einem Button-Handler zu zeichnen. Alles was Du zeichnest geht verloren sobald es von einem anderen Fenster überdeckt wird.

    Zeichne besser im Paint-Event.



  • erst mal danke für den Tipp. Der Behälter füllt sich zwar bis 100 aber das sieht man schon nicht mehr da es zu schnell geht 🙂

    Ok. Aber wo soll ich den Code denn hinpacken wenn nicht in den Buttonklick ?
    Ins onpaint kann ichs ja auch nicht tun . Was bleibt noch übrig ?



  • und im form1_paint Event zu zeichnen bringt auch keine Besserung. Da ist auch alles weg wenn ich mit nem anderen Fenster drübergeh.



  • using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace C
    {
        public partial class Form1 : Form
        {
            private uint start = 0; // Startwert
            private uint height;
            private uint step = 10; // Schrittweite
    
            public Form1()
            {
                InitializeComponent();
    
                height = start;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (height >= 100)
                {
                    height = start;
                }
                else
                {
                    height += step;
                }
    
                Refresh();
            }
    
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                Graphics x = e.Graphics;
    
                x.DrawRectangle(new Pen(Color.Blue), 30, 30, 70, 100);
    
                x.FillRectangle(new SolidBrush(Color.Blue), 30, 30, 70, height);
            }
        }
    }
    


  • sorry aber da geht gar nix

    beim refresh wird ja wohl auch die onpaint methode aufgerufen oder



  • ahhh

    du meintest wohl auch die onpaint methode :))

    dann gehts nämlich 🙂



  • OnPaint der Klasse Control löst das Paint-Event aus.

    Also mache es so wie von lööklökl vorgeschlagen. Und wenn es nicht geht, hast Du vergessen das Event zu abonnieren.

    und im form1_paint Event zu zeichnen bringt auch keine Besserung. Da ist auch alles weg wenn ich mit nem anderen Fenster drübergeh.

    Das stimmt nicht.


Anmelden zum Antworten