Модераторы: gambit, Partizan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перерисовка Panel 
:(
    Опции темы
Relrin
Дата 13.9.2012, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 20.2.2012

Репутация: нет
Всего: нет



Необходимо чтобы после того, как загнал все точки в список (List), их отрисовало на panel. Причем так, чтобы "не моргала" панель. Быть может подскажет кто, как решить эту проблемку?
Код:

Код

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_1_MiAPR
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        // массив точек
        private List<Points> pointArray = new List<Points>();
 
        private void button1_Click(object sender, EventArgs e)
        {
            // читаем значения с полей
            int cntPoints = Convert.ToInt32(cntBox.Text); // сколько объектов
            int cntClass  = Convert.ToInt32(cntCls.Text); // сколько классов объектов
            // создаем экземляры объектов и задаем им случайные значения
            for(int i = 0; i < cntPoints; i++)
            {
                pointArray.Add(new Points(panel.Width-10,panel.Height-10));
            }
            
        }
 
        private void panel_Paint(object sender, PaintEventArgs e)
        {
            foreach (Points pt in pointArray)
            {
                e.Graphics.DrawRectangle(new Pen(Color.Black, 1),new Rectangle(pt.x,pt.y,1,1));
            }
            panel.Refresh();
        }
    }
}

PM MAIL   Вверх
diadiavova
Дата 13.9.2012, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142





--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Relrin
Дата 13.9.2012, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 20.2.2012

Репутация: нет
Всего: нет



Цитата(diadiavova @ 13.9.2012,  19:54)
http://msdn.microsoft.com/ru-ru/library/3t7htc9c.aspx

Спасибо, помогло.
Пока только одно не ясно - почему, рисует только одну точку из List'а, хотя я указываю больше чем одну. Причем, каждая задается случайными числами:

Код

       public Points(int maxX, int maxY)
        {
            Random random = new Random();
            x = random.Next(maxX);
            y = random.Next(maxY); 
        }

PM MAIL   Вверх
diadiavova
Дата 13.9.2012, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Попробуй так
Код

       Random random = new Random();
       public Points(int maxX, int maxY)
        {

            x = random.Next(maxX);
            y = random.Next(maxY); 
        }



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Relrin
Дата 13.9.2012, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 20.2.2012

Репутация: нет
Всего: нет



Цитата(diadiavova @ 13.9.2012,  20:37)
Попробуй так
Код

       Random random = new Random();
       public Points(int maxX, int maxY)
        {

            x = random.Next(maxX);
            y = random.Next(maxY); 
        }

Все так же. Рисует одну точку. Рисует по одной дальше, если я кнопку нажимаю поразово.
PM MAIL   Вверх
diadiavova
Дата 13.9.2012, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Цитата(Relrin @  13.9.2012,  21:42 Найти цитируемый пост)
Все так же. Рисует одну точку. Рисует по одной дальше, если я кнопку нажимаю поразово.

А как надо? У тебя ведь тут только одна точка прописана. Заполни список в цикле и будет много разных точек.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Relrin
Дата 13.9.2012, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 20.2.2012

Репутация: нет
Всего: нет



Цитата(diadiavova @ 13.9.2012,  20:47)
Цитата(Relrin @  13.9.2012,  21:42 Найти цитируемый пост)
Все так же. Рисует одну точку. Рисует по одной дальше, если я кнопку нажимаю поразово.

А как надо? У тебя ведь тут только одна точка прописана. Заполни список в цикле и будет много разных точек.

Так все точки, которые я создаю (их количество я заранее задаю) помещаю в список (List<Points>), к которому потом выполняю код:
Код

foreach (Points pt in pointArray)
{
    e.Graphics.DrawRectangle(new Pen(Color.Black, 1),new Rectangle(pt.x,pt.y,1,1));
}

Но, отрисовывается, все равно одну точку. Не могу понять почему...

Это сообщение отредактировал(а) Relrin - 13.9.2012, 20:49
PM MAIL   Вверх
diadiavova
Дата 13.9.2012, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Код

for(var i = 0; i <10; i++)
{
    pointArray.Add(new Point(random.Next(maxX),random.Next(maxY));
}




--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Relrin
Дата 13.9.2012, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 20.2.2012

Репутация: нет
Всего: нет



Цитата(diadiavova @ 13.9.2012,  20:49)
Код

for(var i = 0; i <10; i++)
{
    pointArray.Add(new Point(random.Next(maxX),random.Next(maxY));
}

Я в обработчике кнопки писал даже так уже:
Код

            Bitmap bmp = new Bitmap(pictureBox.Width, pictureBox.Height);
            Graphics gr = Graphics.FromImage(bmp);
            for (int i = 0; i < pointArray.Count; i++)
            {
                gr.DrawRectangle(new Pen(Color.Red, 5), pointArray.ElementAt(i).x, pointArray.ElementAt(i).y, 4, 4);  
            }
            gr.Dispose();
            pictureBox.Image = bmp;

Просто сугубо для проверки и отчаяния. Все равно рисует одну точку. Пока не нажму кнопку - не отрисует вторую. Третий раз - третью и т.д.
PM MAIL   Вверх
diadiavova
Дата 13.9.2012, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



А ты в этом цикле
Код

           for(int i = 0; i < cntPoints; i++)
            {
                pointArray.Add(new Points(panel.Width-10,panel.Height-10));
            }
Несколько раз загоняешь одну и ту же точку в список


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Relrin
Дата 13.9.2012, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 20.2.2012

Репутация: нет
Всего: нет



Цитата(diadiavova @ 13.9.2012,  20:53)
А ты в этом цикле
Код

           for(int i = 0; i < cntPoints; i++)
            {
                pointArray.Add(new Points(panel.Width-10,panel.Height-10));
            }
Несколько раз загоняешь одну и ту же точку в список

Должны же быть другие способы пройтись по списку и отрисовать, чем по N раз загонять одну и ту же точку. Мы же из списка не удаляем точки, а только добавляем, а затем считываем...  smile 
PM MAIL   Вверх
diadiavova
Дата 13.9.2012, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Цитата(Relrin @  13.9.2012,  21:56 Найти цитируемый пост)
Должны же быть другие способы пройтись по списку и отрисовать, чем по N раз загонять одну и ту же точку.

Как раз загонять одну и ту же не надо, а ты это делаешь. Тот код я у тебя скопировал


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Relrin
Дата 13.9.2012, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 20.2.2012

Репутация: нет
Всего: нет



Цитата(diadiavova @ 13.9.2012,  20:57)
Цитата(Relrin @  13.9.2012,  21:56 Найти цитируемый пост)
Должны же быть другие способы пройтись по списку и отрисовать, чем по N раз загонять одну и ту же точку.

Как раз загонять одну и ту же не надо, а ты это делаешь. Тот код я у тебя скопировал

Одна и таже точка не загоняется. В кострукторе класса идет инициализация точки, ее положения, а затем запись в список, List.
PM MAIL   Вверх
diadiavova
Дата 13.9.2012, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Цитата(Relrin @  13.9.2012,  22:02 Найти цитируемый пост)
Одна и таже точка не загоняется. В кострукторе класса идет инициализация точки, ее положения, а затем запись в список, List. 

Ну я что вижу в коде, о том и говорю.
Ладно, я тебе попозже(возможно еще сегодня) выложу пример, а то так мы друг друга не поймем.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Relrin
Дата 13.9.2012, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 20.2.2012

Репутация: нет
Всего: нет



Цитата(diadiavova @ 13.9.2012,  21:04)
Цитата(Relrin @  13.9.2012,  22:02 Найти цитируемый пост)
Одна и таже точка не загоняется. В кострукторе класса идет инициализация точки, ее положения, а затем запись в список, List. 

Ну я что вижу в коде, о том и говорю.
Ладно, я тебе попозже(возможно еще сегодня) выложу пример, а то так мы друг друга не поймем.

Я даже в отладчике прошелся по коду. Инициализация там верная. При foreach "извлекает" элементы, подает команды на отрисовку с этими точками. Но не отображает, почему-то. Хотя в том же битмапе, я сначала отрисовываю, как своего рода буффере. А затем даю команду на отрисовку в pictureBox. В итоге, почему-то рисует ОДНУ точку, а не N...

Другими словами:
- В списке есть все элементы, которые я проинициализировал ранее
- В этом фрагменте, в foreach, элементы из списка считываются в obj корректно и хранят позицию его на форме
- После первой "итерации", берет новый элемент, но его "не добавляет"/не отрисовывает на битмапе(скорей всего так), и не выводит на picturebox...
Вопрос. Почему так? Почему после первой итерации не рисует на объекте, хотя из списка элемент считан?

Это сообщение отредактировал(а) Relrin - 13.9.2012, 21:32
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0701 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.