Элементарный вопрос: Вызов процедуры с graphics

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

dQ
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 11.11.2006 (Сб) 1:36

Элементарный вопрос: Вызов процедуры с graphics

Сообщение dQ » 19.11.2006 (Вс) 0:14

Есть процедура
Код: Выделить всё
    Private Sub Graph(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)


Как ее вызвать?
graph(sender, e) естественно вылетает с ошибкой несовместимые типы

GoodWin74
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 80
Зарегистрирован: 29.09.2006 (Пт) 18:58
Откуда: от Верблюда! :)

Сообщение GoodWin74 » 19.11.2006 (Вс) 0:53

а по подробнее...
http:\\start4you.narod.ru

dQ
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 11.11.2006 (Сб) 1:36

Сообщение dQ » 19.11.2006 (Вс) 1:06

По подробнее:

Вот пример, процедура, в которой я строю оси координат для графика

Код: Выделить всё
    Private Sub GraphAxes(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
        Dim g As Graphics = e.Graphics
        Dim pen_Axes As Pen = New Pen(Color.Black, 2)
        g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
        g.DrawLine(pen_Axes, 10, 10, 10, 184)
        g.DrawLine(pen_Axes, 10, 97, 354, 97)
        g.Dispose()
    End Sub


Как ее можно вызвать, допустим по изменению чэкбокса?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.11.2006 (Вс) 8:50

А зачем тебе вообще параметр sender?
А почему ты освобождаешь переданный graphics, хотя он не твой?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 19.11.2006 (Вс) 13:49

Gserg, sender похоже присутствует, поскольку это обработчик события, а у него сигнатура (object, EventArgs). Это, конечно, моя догадка.
Невинно убиенного Graphics жалко, вдруг он кому-то дальше пригодится? Вы учитите, что при "присваивании" Dim g As Graphics = e.Graphics не создается копии Graphics, а создается ссылка на один единственный объект Graphics (почитайте про reference types). Если хотите сдлеать копию (только не в этом случае) создайте используйте копирующий конструктор, либо метод копирования. Dim g As Graphics = New Graphics(e.Graphics).

Для того, чтобы вызвать функцию, логично, что нужно передать правильные параметры, т.к. обработчик щелчка по check box и перерисовки обладает разными параметрами, вам придется создать объект вручную. Sender'ом может остаться check box, т.о.:

System.Windows.Forms.PaintEventArgs args = New System.Windows.Forms.PaintEventArgs()
args.Graphics = New Graphics() ' Как-то тут создайте объект, все равно как. Или стащите откуда-нибудь, если он уже есть.
Graph(sender, args) ' все аргументы нужного типа
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

Neco
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 06.07.2005 (Ср) 1:21

Сообщение Neco » 22.11.2006 (Ср) 20:46

всё это конечно правильно, что вы сказали, но по-моему, челу для счастья в жизни не хватает элементарного refresh'а.

Glyckmen
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 30.04.2006 (Вс) 15:32
Откуда: Санкт-Петербург

Сообщение Glyckmen » 23.11.2006 (Чт) 10:40

dQ
Как ее можно вызвать, допустим по изменению чэкбокса?

Для того что-бы привязать свою процедуру к какому-нибудь событию, надо в конце поставить ключевое слово Handles и затем написать имя контрола и выбрать событие. Например так:
Код: Выделить всё
Private Sub GraphAxes(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles CheckBox1.CheckedChanged
Это должно помочь.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 63

    TopList