Перерисовка панелей C#

Тема в разделе "Другие задачи", создана пользователем tarn, 17 апр 2011.

  1. tarn

    tarn Гость

    Спасайте! Написал прогу, рисующие рандомные треугольники с рандомными цветами на 7 панелей (по одному треугольнику на панели):
    Код (C++):
    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 Lab_3_29 {
    public partial class Form1 : Form {

    double[] nx, ny;
    const int NP = 100;
    Random r = new Random();
    const int WH = 200;
    private int cshft, pshft;
    Color[] col,colors;
    Panel[] panels;
    PointF[] points;
    PointF[] pnts;
    int np,pn,cn;


    void GenPoints() {
    for (int i = 0; i < NP; i++) {
    nx[i] = r.NextDouble() * WH;
    ny[i] = r.NextDouble() * WH;
    }
    pshft = r.Next(NP);
    cshft = r.Next(10);
    }

    public Form1() {
    InitializeComponent();
    nx = new double[NP]; ny = new double[NP];
    col = new Color[] { Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Blue, Color.BlueViolet, Color.Coral, Color.Lime, Color.Magenta, Color.Brown };
    GenPoints();
    panels = new Panel[7];
    panels[0] = panel1; panels[1] = panel2; panels[2] = panel3; panels[3] = panel4; panels[4] = panel5; panels[5] = panel6; panels[6] = panel7;
    Init();
    }

    private void panels_Paint(object sender, PaintEventArgs e) {
    pnts = new PointF[3];
    Graphics g = e.Graphics;
    Pen p = new Pen(colors[np], 2);
    Brush b = new SolidBrush(colors[np]);
    pnts[0] = points[0 + np * 3];
    pnts[1] = points[1 + np * 3];
    pnts[2] = points[2 + np * 3];
    g.DrawPolygon(p, pnts);
    g.FillPolygon(b, pnts);
    np++;
    }

    void Init() {
    np = 0;
    points = new PointF[21];
    colors = new Color[7];
    pn = pshft; cn = cshft;
    //формирование точек
    for (int i = 0; i < 21; i++) {
    pn %= NP;
    points[i] = new PointF((float)nx[pn], (float)ny[pn]);
    pn++;
    }
    //формирование цветов
    for (int i = 0; i < 7; i++) {
    cn %= 10;
    colors[i] = col[cn];
    cn++;
    }
    //запись на панели
    foreach(Panel pnl in panels) {
    pnl.Invalidate(); pnl.Refresh();
    pnl.Paint += new PaintEventHandler(panels_Paint);
    }  
    }

    private void bColor_Click(object sender, EventArgs e) {
    cshft = r.Next(10);
    Init();
    }

    private void bPlace_Click(object sender, EventArgs e) {
    pshft = r.Next(NP);
    Init();
    }

    }
    }
    Теперь надо, чтобы по нажатию на кнопку bColor треугольники перерисовывались с измененными цветами, а при нажатии на bPlace с измененной формой.
    У меня глюк какой-то с перерисовкой. (Плохо представляю, как использовать Invalidate, Refresh и т.п., а также, возможно, где-то с индексами затупил). При этом, при первом нажатии на bColor ещё что-то более-менее разумное выходит, а после повторных нажатии, панели одна за другой пропадают.
    Помогите пожалуйста, завтра сдавать! :ya_lamo:
     
Загрузка...
Похожие Темы - Перерисовка панелей
  1. xKlonx
    Ответов:
    4
    Просмотров:
    5.920
  2. LuMee
    Ответов:
    5
    Просмотров:
    3.811

Поделиться этой страницей