Автор вопроса: Nezhniy | Web-сайт:www.helpim.ru | ICQ: 419841508
Всем здрасьте . Задача: построить линию на panel1 так чтобы координаты 2й точки зависили от значения вертикального скроллбара ( y значение точки) и горизонтального скроллбара (х значение точки).
' Create pen.
Dim blackPen As New Pen(Color.Black, 3)
' Create points that define line.
Dim point1 As New Point(100, 100)
Dim point2 As New Point(500, 100)
' Draw line to screen.
e.Graphics.DrawLine(blackPen, point1, point2)
-это код создания линии, его я сунул в panel1_paint , линия успешно строится , а вот как связать с значениями скроллбарми , не получается ( P.S пробовал объявлять
Dim blackPen As New Pen(Color.Black, 3)
Dim point1 As New Point(100, 100)
Dim point2 As New Point(500, 100)
в код самой формы , тогда в коде прогрессбара появляется свойство point1.x и point.y , но опять же , даже когда пишу код point1.x=VScrollBar1.value все равно линия почему то не двигается вместе с передвижением ползунка( объясните пожалуйста почему , в том же powerpacks 2.0 все получается (там есть объект lineshape, я сделал все также как описано сверху , там все работает , но проблема в том что при работе с моей программой пользователю надо будет качать и устанавливать powerpacks 2.0) Сильно не ругайте , если что то делаю глупо.
Его и не надо устанавливать, просто ложишь сборку рядом с exe-файлом и все дела. Или, как я сказал, сборку включить в ресурсы и загружать при запуске из ресурсов
AgentFire пишет:
1. Dim point1 As New Point(100, 200)
2. Dim point2 As New Point(HScrollBar1.Value, VScrollBar1.Value)
1. DrawLine...
это я уже попробовал сразу как начал использовать класс graphics . Создавал массив, но
Dim point2 AsNew Point(HScrollBar1.Value, VScrollBar1.Value)
из за этой строки выбивается "Ошибка при создании формы. См. Exception.InnerException. Ошибка: Object reference not set to an instance of an object."
2. Про ресурсы ,честно, я сам не понял и про сборку рядом с ехе... я так понимаю под словом сборка ты имеешь ввиду исталлер power packs 2.0 от майкрософта? без установки он выбивает ошибку при включении уже скомпилированной моей проги "InvalidOperationException" и говорит типа отправить или не отправить отчет в майкрософт. Вот поэтому чтобы не @%$#& мозг этими powerpack'ами я хотел сделать тоже самое, только через graphics . А в powerpacks там есть объект lineshape (линия) , там можно делать с двумя ее составляющими точками (начало и конец ) что угодно и связывать их с чем угодно . Это удобно.
P.S кому не лень помочь , вот архив , там все есть , моя программа , исходники + powerpacks 2.0 инсталлер (если нужен ) и заплатка на .net framework 2.0 (если программа даже после установки powerpacks 2.0 выбивает ошибку InvalidOperationException, это точно исправит ) -> http://newcelebrity.ru/help.rar . Просто у меня это одна из программ которую надо будет представлять как проект , а если там будут заморочки с пауэрпаками и тд , будет худо
да и еще у мя появилась кое какая задумка ,не знаю бредовая ли она , написать цикл чтобы при каждом новом значении например вертикального скроллбара (связанного с y значением точки ) точка point2 стиралась и потом снова создавалась только с уже с point2.y=vscrollbar1.value , возможно ли это все реализовать ?
AgentFire пишет:
Ах да. Рисовать нужно на новом битмапе, и после прорисовки подставлять на место старого. А старый диспозить.
Слух, помоги школоло ) Задумку твою понял , а вот реализовка , пока у мя мозгов не до конца хватает :D
линии я строю в panel , а не в битмапе , ну разницы нет почти , так вот , я с циклами плох , поэтому не ругай) :
Dim point1 AsNew Point(100, 200)
Dim point2 AsNew Point
Dim blackPen AsNew Pen(Color.Black, 3) 'массив
PrivateSub VScrollBar1_ValueChanged(ByVal sender AsObject, ByVal e As System.EventArgs) Handles VScrollBar1.ValueChanged
Dim i AsInteger
For i = 1 To 100
i= VScrollBar1.Value
Panel1.Dispose()
dim panel1 as panel
Panel1.Width = 166
Panel1.Height = 170
Point2.y = Vscrollbar1.Value
point1.x = 66 'значение рандомное взял , просто пока x не буду трогать
Next (i)
EndSub
PrivateSub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
e.Graphics.DrawLine(blackPen, point1, point2)
EndSub
новая проблема: он ругается на
Panel1.Dispose()
dim panel1 as panel
что и правильно делает , так вот , а как сделать чтобы он сначала удалял panel1 а потом только заново объявлял как новый объект а в нем "y" точки и т.д а то в этом коде у мя каша получается,вот как разделить на до и после и все в самом цикле? P.S сам то цикл я правильно записал ? : D