Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2011, 15:29   #1
tarnis
 
Регистрация: 05.05.2010
Сообщений: 3
Смущение C# Рисование. Перерисовка панелей.

Написал прогу, рисующие рандомные треугольники с рандомными цветами на 7 панелей (по одному треугольнику на панели):
Код:
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 ещё что-то более-менее разумное выходит, а после повторных нажатии, панели одна за другой пропадают.
P.S. Почему удалили мой пост?
tarnis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движение панелей Muniz Компоненты Delphi 6 30.12.2009 16:06
Создание панелей с заголовком Homer_J_Simpson Общие вопросы по Java, Java SE, Kotlin 3 05.12.2009 10:42
random расположение панелей Aндрей Помощь студентам 4 23.09.2009 20:03
Правильное выравнивание панелей amigo555 Общие вопросы Delphi 1 04.05.2009 12:44
Список панелей Кронос Общие вопросы Delphi 1 23.08.2007 16:27