Draw & Scroll



  • Hallo Leute,

    😕

    kann mir hier einer weiterhelfen?
    Ich versuche mehrere(100) Rechtecke nebeneinander zu zeichnen.
    Mit der Scrolling Leiste möchte ich alle gezeichneten Rechtecke anscrollen.
    Das Problem ist, dass jedesmal wenn ich scrolle, sich das Bild neu aufgebaut wird und ich immer nur die ersten Rechtecke sehe.
    Wie kann ich die Rechtecke permanent darstellen??

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsApplication1
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    this.BackColor = Color.Aqua;
    this.AutoScrollMinSize = new Size(5000, 5000); // Bereich fürs Autoscroll
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void Form1_Paint_1(object sender, PaintEventArgs pe)
    {
    Rechteck(sender, pe);
    }

    private void Rechteck(object sender, PaintEventArgs ge)
    {
    int i;
    int k;

    k = 0;
    for (i = 0; i < 100; i++)
    {

    //zum Zeichnen eines Rechtecks
    Graphics g = ge.Graphics;
    Pen p = new Pen(Color.Green, 3);
    g.DrawRectangle(p, k, 200, 100, 75);
    k=k+120;
    }
    }

    private void Form1_Resize(object sender, EventArgs pe)
    {

    }

    }
    }

    😕



  • Wenn einem hier in Sachen GDI+ nicht weitergeholfen werden kann, kennt ihr ein anderes Forum, wo ich Hilfe zu meinem Problem bekommen könnte?



  • Hi,

    sorry für meine späte Antwort,

    du musst das zeichnen mit der Scrollposition verbinden.

    Versuchs mal so:

    public partial class Form1 : Form
        {
            private Point currentScrollPoint;
            public Form1()
            {
    
                InitializeComponent();
                currentScrollPoint = new Point(0, 0);
                this.BackColor = Color.Aqua;
                this.AutoScrollMinSize = new Size(5000, 5000); // Bereich fürs Autoscroll 
                this.AutoScroll = true;
            }
    
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                Rechteck(sender, e); 
            }
            private void Rechteck(object sender, PaintEventArgs ge)
            {
                int i;
                int k;
    
                k = 0;
                for (i = 0; i < 100; i++)
                {
                    //zum Zeichnen eines Rechtecks
                    Graphics g = ge.Graphics;
    
                    Pen p = new Pen(Color.Green, 3);
                    int y = 200 - currentScrollPoint.Y;
                    int x = k- currentScrollPoint.X;
                    g.DrawRectangle(p, x ,y, 100, 75);
                    g.DrawString(i.ToString(), new Font(FontFamily.GenericSerif, 8), Brushes.Black, x, y + 5);
                    k = k + 120;
                }
            }
    
            private void Form1_Scroll(object sender, ScrollEventArgs e)
            {
                if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll)
                {
                    currentScrollPoint.X = e.NewValue;
                }
                else
                    currentScrollPoint.Y = e.NewValue;
    
                Invalidate();
            } 
        }
    


  • Danke.


Anmelden zum Antworten