znikajace linie :( ???

0

witam,
mam do zrobienia program ktory kwadrat bedzie dzielil na mniejsze kwadraciki a te powstale kwadraciki na trojkaty

wiec to zrobilem lepiej lub gorzej to pozostawiam do oceny wam

ale efekt mnie niezadowala bo w oknie wynikowym dostaje cos takiego :
http://img63.yfrog.com/i/oczekiwana.jpg/
jednak jak zminimalizuje , wyjade za ekran , pomniejsze etc. to linie skosne znikaja (znika ta czesc ktora byla chwilowo niewidoczna czyli jak pomniejsze okno tak ze zakryje pol tabeli to znika mi polowa jak zminimalizuje to wszystkie przyklad : http://img8.imageshack.us/img8/6042/zwalone.jpg )

ponizej zamieszczam jeszcze kod form1 i form2 i link do aktualnego stanu rzeczy czyli spakowanego projektu jak by ktos byl na tyle dobry zeby to dokladnie sprawdzic http://rapidshare.com/files/321625384/trojkaty.rar.html
wiem ze duzo niepotrzebnych zmiennych itd. ;p
prosze o pomoc wyjasnienie / edycje kodu / podpowiedz cokolwiek PLZZZ dlaczego tak sie dzieje ???

//Form1

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 trojkaty
{

    public partial class Form1 : Form
    {


        int aa;
        public double x1, x2, x3, x4;
        public string ss;

        
        public Form1()
        {
            InitializeComponent();

            textBox1.MaxLength = 5;
            textBox2.MaxLength = 5;
            textBox3.MaxLength = 5;
            textBox4.MaxLength = 5;

        }


        void button1_Click(object sender, EventArgs e)
        {

            var F2 = new Form2();
            F2.Show();
           
                ss = textBox1.Text;
                x1 = Convert.ToDouble(ss);

                ss = textBox2.Text;
                x2 = Convert.ToDouble(ss);

                ss = textBox3.Text;
                x3 = Convert.ToDouble(ss);

                ss = textBox4.Text;
                x4 = Convert.ToDouble(ss);

                F2.drozx = x1;
                F2.drozy = x2;
                F2.dpodx = x3;
                F2.dpody = x4;
                F2.srozx = Convert.ToString(F2.drozx);
                F2.srozy = Convert.ToString(F2.drozy);
                F2.spodx = Convert.ToString(F2.dpodx);
                F2.spody = Convert.ToString(F2.dpody);


                aa++;
                F2.Text = "Rysunek " + aa;
                
             
              
            

        }

       
    }
}

//FORM2

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


namespace trojkaty
{
    public partial class Form2 : Form
    {
    
       
        public Pen pioro;
        public float frozx, frozy, fpodx, fpody, a;
        public double drozx, drozy, dpodx, dpody;
        public string srozx, srozy, spodx, spody;
        public Point punkt1, punkt2;
        public int a1, b1, a2, b2, x, y, liczpodx = 0, liczpody = 0, xx=0, yy=0,ii=1;
        public Form2()
        {
            
           
            InitializeComponent();
            
        }

      
      

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            
            Graphics g = e.Graphics;
            Pen pioro = new Pen(Color.Black);

            g.DrawRectangle(pioro, 5, 5, Convert.ToInt64(drozx), Convert.ToInt64(drozy));

            x = Convert.ToInt32(drozx) / Convert.ToInt32(dpodx);
            y = Convert.ToInt32(drozy) / Convert.ToInt32(dpody);
            liczpodx = Convert.ToInt32(dpodx);
            liczpody = Convert.ToInt32(dpody);
           

            //RYSOWANIE KRESEK PIONOWYCH
            for (int i = 0; i < liczpodx; i++)
            {
                

                a1 = 5 + x * i;
                b1 = 5;
                a2 = 5 + x * i;
                b2 = 5 + Convert.ToInt32(drozy);

                Point punkt1 = new Point(a1, b1);
                Point punkt2 = new Point(a2, b2);

                g.DrawLine(pioro, punkt1, punkt2);
            }

            //RYSOWANIE KRESEK POZIOMYCH
            for (int i = 0; i < liczpody; i++)
            {
                a1 = 5;
                b1 = 5 + y * i;
                a2 = 5 + Convert.ToInt32(drozx);
                b2 = 5 + y * i;

                Point punkt1 = new Point(a1, b1);
                Point punkt2 = new Point(a2, b2);

                g.DrawLine(pioro, punkt1, punkt2);
            }

            //RYSOWANIE KRESEK SKOSNYCH
            for (int i = 1; ii - 1 < Convert.ToInt32(dpodx) * Convert.ToInt32(dpody); i++)
            {

                a1 = 5 + x * i;
                b1 = 5 + y * yy;
                a2 = 5 + x * (i - 1);
                b2 = 5 + y * (yy + 1);

                Point punkt1 = new Point(a1, b1);
                Point punkt2 = new Point(a2, b2);
                g.DrawLine(pioro, punkt1, punkt2);
                if (i == liczpodx)
                {
                    i = 0;
                    yy++;

                }


                ii++;
            }
     
        }

    }
     
}

PS: Przepraszam za bledy jestem dysortografem i dyslektykiem ;( !

POZDRAWIAM
hip9k

0

Dokładnie nie pamiętam jakie sposoby są na to, ale jeden ze sposobów, który mi się nasuwa jest użycie któregoś ze zdarzeń np. sizeChanged i w nim użycie metody panel.Refresh(). To jest chyba najprostszy i zarazem najrozrzutniejszy sposób, ponieważ funkcja refresh() odświeży pewnie cały rysunek a nie tylko wymagany kawałek, którego nie było widać. W rezultacie może zamigotać. Spróbuj poszukać coś o funkcjach klasy Graphics np. Invalidate, Update, Refresh itp.

0

ok dzieki wielkie :) !!!
wreszcie doczekalem sie na odpowiedz ;p

1

daj sobie panel.invalidate z Rectanglem (czyli Invalidate(Rectangle rect); )zawierającym odmalowywany obszar, pójdzcie znacznie szybciej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1