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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GDI+ 
:(
    Опции темы
arkonst
Дата 18.2.2008, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте коллеги!

Подскажите пожалуйста, каким образом можно нарисовать что нибудь на контроле средствами GDI+ , так как у меня на форме будет присутствовать контрол tabPage, на нем и нужно кое чего накалякать, но при рисовании получается что рисунок ресуется на главной форме Form1? а на tabPage каким образом нарисовать????
PM MAIL   Вверх
Softaz
Дата 18.2.2008, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


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

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



Код в студию!


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
informatik
Дата 18.2.2008, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Graphics нужно создавать на том, на чем хочешь рисовать:

Код

Graphics g = tabPage.CreateGraphics();


Это сообщение отредактировал(а) informatik - 18.2.2008, 13:17
--------------------
namespace informatik
PM MAIL   Вверх
arkonst
Дата 18.2.2008, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



то есть нужно лезть в кусок кода где прописана инициализация tabPage и там уже колдовать??? 
PM MAIL   Вверх
informatik
Дата 18.2.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

то есть нужно лезть в кусок кода где прописана инициализация tabPage и там уже колдовать???


Ну  зачем же??

Можно просто вставить в событие Paint у нужной TabPage, нужный код:

Пример:
Код

private void tabPage_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = tabPage.CreateGraphics();
            g.FillRectangle(new SolidBrush(Color.Red), 1, 1, 10, 10); //Залитый прямоугольник с координатами (1,1) и размером 10х10 пикс.
        }

--------------------
namespace informatik
PM MAIL   Вверх
arkonst
Дата 18.2.2008, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ну а так я соответственно не правильно зделал??? так как почему -то не выводиться прямоуголник на tabPage, вместо этого он выводиться на главную форму...почему так происходит???



 protected override void OnPaint(PaintEventArgs tabPage1)
        {
            
            Graphics dc = tabPage1.Graphics;
            Pen BlackPen = new Pen(Color.Black, 4);
            dc.DrawRectangle(BlackPen, 250, 150, 50, 50);
            base.OnPaint(tabPage1);
        }
PM MAIL   Вверх
informatik
Дата 18.2.2008, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Да неправильно! Ты переопределил метод Paint главной формы, а не использовал событие Paint элемента tabPage и твой tabPage1 = это параметр формы, зачем ты его переименовал, непонятно.... (по умолчанию там e)... 

А тебе нужно обратиться к методу Paint элемента tabPage1.

Твой код:
Код

  Graphics dc = tabPage1.Graphics;
            Pen BlackPen = new Pen(Color.Black, 4);
            dc.DrawRectangle(BlackPen, 250, 150, 50, 50);

будет работать в методе Paint который написал я:
Код

private void tabPage_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = tabPage.CreateGraphics();
            g.FillRectangle(new SolidBrush(Color.Red), 1, 1, 10, 10); //Залитый прямоугольник с координатами (1,1) и размером 10х10 пикс.
        }


т.е. в методе Paint элемента tabPage;

Это сообщение отредактировал(а) informatik - 18.2.2008, 20:31
--------------------
namespace informatik
PM MAIL   Вверх
arkonst
Дата 19.2.2008, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Informatik   респект тебе.....очень помог ....спасибо......может ты знаешь каким образом можно можно сменять рисунок на другой.....например....мне нужно сделать что-то типа ключа......при 1 он замыкаеться...а при 0 размыкаеться....я так думаю нужно копать в направлении перерисовки?? я прав?
PM MAIL   Вверх
Alekz
Дата 19.2.2008, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 5.2.2008
Где: Запорожье, Украин а

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



Код

private bool _locked = false;

...

private void tabPage_Paint(object sender, PaintEventArgs e)
{
  if (_locked)
    {
            e.Graphics.DrawImage(Properties.Resources.imgLocked, new Point(0,0));
    }
  else
    {
            e.Graphics.DrawImage(Properties.Resources.imgOpened, new Point(0,0));
    }

}


Если надо сменить картинку просто вызови tabPage.Refresh()
И обрати внимание: у объекта PaintEventArgs есть поле Graphics. Лучше использовать его.

Это сообщение отредактировал(а) Alekz - 19.2.2008, 10:00
PM MAIL   Вверх
arkonst
Дата 21.2.2008, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А как пользоваться этим методом Refresh()?????
PM MAIL   Вверх
Alekz
Дата 21.2.2008, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 5.2.2008
Где: Запорожье, Украин а

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



Цитата

Refresh ()
Forces the control to invalidate its client area and immediately redraw itself and any child controls.


например:

Код

 private void btnSetLocked_Click(object sender, EventArgs e)
        {
_locked = true;
tabPage.Refresh()
        }

PM MAIL   Вверх
arkonst
Дата 21.2.2008, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Alekz @ 21.2.2008,  10:11)
Цитата

Refresh ()
Forces the control to invalidate its client area and immediately redraw itself and any child controls.


например:

Код

 private void btnSetLocked_Click(object sender, EventArgs e)
        {
_locked = true;
tabPage.Refresh()
        }

это я понял....а каким образом именно по наступлению события ...приход еденицы например....можно сменить одну прорисовку на другую...?? я просто чего-то не понимаю....что за код должен следовать после вызова метода Refresh()???
PM MAIL   Вверх
Alekz
Дата 21.2.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 5.2.2008
Где: Запорожье, Украин а

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



Где-то в коде ты меняешь какие-то данные (выбираешь нужный тебе рисунок) и вызываешь Refresh() для нужного контрола.
Контрол сразу бросается перерисовываться. При этом он бросит событие Paint.
В обработчике события просто и удобно нарисовать на контроле все, что ты хочешь. Например так:

Код

namespace WindowsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private bool _locked = false;

        private void Form1_Load(object sender, EventArgs e)
        {
            panel1.Paint += new PaintEventHandler(panel1_Paint);
            button1.Click += new EventHandler(button1_Click);
        }

        void button1_Click(object sender, EventArgs e)
        {
            _locked = !_locked;
            panel1.Refresh();//Панель сразу перерисуеться
        }

        void panel1_Paint(object sender, PaintEventArgs e)
        {
            if (_locked)
            {
                e.Graphics.DrawImage(Properties.Resources.imgLocked, new Point(0, 0));
            }
            else
            {
                e.Graphics.DrawImage(Properties.Resources.imgOpened, new Point(0, 0));
            }
        }
    }
}

PM MAIL   Вверх
Yahhi
Дата 6.3.2008, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вопрос в принципе по этой же теме, но немного нестандартный. Есть два объекта-класса. Каждый из них как-то отображается на форме. Кружочком там, квадратиком, неважно. 
Попробовала создать в каждом объекте свой метод перерисовки. В форме добавляю оба на событие paint: 
           
Код

 this.Paint += new PaintEventHandler(map.drawMap);
            this.Paint += new PaintEventHandler(robokop.draw);

Оба запускаются. Но второй отказывается рисовать. То есть 
Код

public void draw(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            Pen gPen = new Pen(Color.Black);
            Point[] trianglePoints = new Point[3];
            trianglePoints[0] = new Point(5, 3);
            trianglePoints[1] = new Point(15, 10);
            trianglePoints[2] = new Point(5, 17);
            Graphics gRobot = e.Graphics;
            gRobot.DrawLines(gPen, trianglePoints);
        }

выдает в runtime на строке DrawLines буквально следующее: ArgumentException was unhandled. Недопустимый параметр. 

Получается нельзя использовать два обработчика события Paint?

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

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


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

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


 




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


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

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