Свой элемент управления

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

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

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 29.04.2007 (Вс) 15:58

1) При смене ориентации не меняется ClientRectangle, а надо бы.

Про это вообще и не подумал... Пусть пользователь тянет! :roll:
Исправить легко...
2) При вертикальной ориентации ползунок двигается сверху-вниз, а привычней снизу-вверх

Привычней... Но мне надо было наоборот и, видимо, сделал для себя. Но и это поправить нетрудно.
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 29.04.2007 (Вс) 16:54

я не сказал про другие досадные ошибки, так как думал, что ты сам их заметишь когда будешь исправлять код. :?
Попробуй кликнуть мышкой не на ползунок, а скажем на отметки - сразу получишь исключение. Есть и другие глюки...
Этот код пока нельзя рекомендовать ни для примера ни для кирпича - код не комментирован и много ошибок
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 29.04.2007 (Вс) 17:36

Да, видел, надо исправить. Еще видел, что отрисовку стандартного ползунка при смене ориентации не учел. Че еще есть, может замечу, но лучше сказать...
И потом комментировать чужой код... Разрешаешь?
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 29.04.2007 (Вс) 18:06

И потом комментировать чужой код... Разрешаешь?
Конечно, я же не спрашиваю разрешения у Microsoft на использование операторов языка :wink:

При смене на вертикальную ориентацию неправильное вычисление позиций прямоугольников (идет смещение вверх относительно ClientRectangle. Это хорошо видно в дизайне когда на контроле рисуется ограничивающая рамка)
Ты и сам в состоянии найти ошибки поигравшись с PropertyGrid
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 29.04.2007 (Вс) 19:32

Оговоренное поправил.
Честно игрался с ползунком. Не понравилось, как ползунок относится к большим размерам (там, 100:100), может ограничитель поставить? Ну, и размеры полюбому менять.
И потом, как думаешь, по-моему нормально и когда он ездит снизу вверх... :roll:
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 29.04.2007 (Вс) 20:04

было бы неплохо если ограничение ставилось в зависимости от габаритов контрола.
А в добавок ко свойству Orientation сделать свойство типа SlideDirection, которое отвечало бы за направление движения ползунка.
К примеру если Orientation=Horizontal, то у SlideDirection можно выбрать 2 значения : LeftToRight и RightToLeft.
А если Orientation=Vertical, то SlideDirection: BottomToTop и TopToBottom
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 06.05.2007 (Вс) 11:14

Nord777, зацени, правда сделал не то, о чем ты говорил... :roll:
Но тоже прикольная фишка! Видел на многих ползунках, смотрится классно!
Вложения
Track.rar
TrackBar
(58.21 Кб) Скачиваний: 190
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

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

Сообщение GoodWin74 » 09.05.2007 (Ср) 10:19

Слухайте у меня проблема сделал Контрол, и если его поставить на форму и поставить что при нажатии на него будут выполняться какието действия, они не РАБОТАЮТ :( :cry:

Тоесть:

Код: Выделить всё
Private Sub UserControl1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles UserControl1.Click
        MsgBox("dddd")
    End Sub

не выполняеться!!!

Я его создавал как UserControl!!!
http:\\start4you.narod.ru

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

Сообщение GoodWin74 » 09.05.2007 (Ср) 10:25

кстати Alex[fj] прикольный контрол!!!!
http:\\start4you.narod.ru

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

Сообщение GoodWin74 » 09.05.2007 (Ср) 22:29

Кто знает как объявить функцию Click для контрола а то на форме когда мой контрол находиться действия Click не действует!!! :(
http:\\start4you.narod.ru

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 10.05.2007 (Чт) 7:03

GoodWin74, не верю! Все должно срабатывать, при условии видимости поля контрола. А вот если на нем расположены элементы управления, то все конечно усложняется.
Весь мир матрица, а мы в нем потоки байтов!

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

Сообщение GoodWin74 » 10.05.2007 (Чт) 13:29

Кароче я создал Windows Control Library проект на него положил 2 таймера и Один ПикчеБокс. Я пробовал если создавать Windows Service то Click работает, а в Windows Control Library(UserControl) чето не пашет может в ручную как то надо объявить действие?
http:\\start4you.narod.ru

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 10.05.2007 (Чт) 14:02

GoodWin74, за контролл благодари Nord777, он его "родил", я только "обучил" :)
И вообще, если не пашет, бери готовый, смотри, как устроен... или бери код и исправляй под себя :)
И Click работает по-любому! Это есть уже с новоиспеченным эл управления
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 10.05.2007 (Чт) 14:19

GoodWin74, если пиктуребокс занимает весь контрол, то надо ловить его события Click
Весь мир матрица, а мы в нем потоки байтов!

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

Сообщение GoodWin74 » 10.05.2007 (Чт) 15:00

И как же ловить!
http:\\start4you.narod.ru

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.05.2007 (Пт) 11:50

Для GoodWin74 был дан ответ в ICQ, на всякий случай повторяю его здесь на примере события Click:

Код: Выделить всё
' Объявляем событие
Public Shadows Event Click(ByVal sender As Object, ByVal e As System.EventArgs)

' дальше в обработчике клика пиктуребокса
Private Sub PictureBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles pbCenterLine.Click
        RaiseEvent Click(sender, e)
End Sub


При этом событие в пикчурбоксе вызовет событие контрола и все сработает как надо.
Весь мир матрица, а мы в нем потоки байтов!

Foxen
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 04.06.2007 (Пн) 0:20
Откуда: Уфа

Создание контрола

Сообщение Foxen » 05.06.2007 (Вт) 21:24

На VB программирую я недавно и поэтому если мой вопрос покажется банальным не судите меня )))) Я тока учусь....)

Так вот у меня есть вопрос по поводу того что допустим я создал определенный класс и хочу чтобы этот класс появился на форме, обязательно ли с самой формы (т.е. допустим Form1_Load) писать типа


Код: Выделить всё
Dim a As Class1
        a = New Class1
        Me.Controls.AddRange(New Control() {a})  ???


Можно ли создание контрола запихнуть куда нибудь в процедуру самого класса типа New ???
Что-то вроде :

Код: Выделить всё
  MyClass.Controls.AddRange(New Control() {a})

или
Код: Выделить всё
  Me.Controls.AddRange(New Control() {a})

Просто такая запись у меня не работает :(
90% всех ошибок сидят в полуметре от монитора...
Я бы изменил мир, но Бог не даёт исходников, а дьявол все время что-то кодит...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 05.06.2007 (Вт) 22:00

Конечно же нельзя: откуда контрол узнает, на какую форму ему себя добавлять?
Изображение

Foxen
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 04.06.2007 (Пн) 0:20
Откуда: Уфа

Изменение контрола

Сообщение Foxen » 05.06.2007 (Вт) 23:21

Жалко :(

Тогда есть другая проблема, если своему контролу я присваиваю имя допустим "name"+i, как после этого допустим обратиться к этому контролу, я имею ввиду мне нужен цикл в котором нужно обратиться ко всем созданным мною контролам, что-то типа:
Код: Выделить всё
for i=1 to N then name(i).text=....

или
Код: Выделить всё
for i=1 to N then name{i}.text=....

Но проблема заключается в том что VB не знает заранее этот идентификатор....

Просто в программе необходимо создавать блоки, которые перемещаются по форме и все данные этих блоков необходимо заносить в массив, из которого потом можно было бы загрузить все эти данные.
90% всех ошибок сидят в полуметре от монитора...
Я бы изменил мир, но Бог не даёт исходников, а дьявол все время что-то кодит...

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 06.06.2007 (Ср) 9:00

Так вот у меня есть вопрос по поводу того что допустим я создал определенный класс и хочу чтобы этот класс появился на форме, обязательно ли с самой формы (т.е. допустим Form1_Load) писать типа ....


Ты имел ввиду что то типа этого?
Код: Выделить всё
Public Class Form1
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim Lbl As Label = New Class1(Me)
    End Sub
End Class


Код: Выделить всё
Public Class Class1
    Inherits Label

    Public Sub New(ByVal OwnerForm As Form)
        Me.Text = "Label1"
        Me.Name = "Label1"
        Me.Location = New Point(10, 10)
        OwnerForm.Controls.Add(Me)
    End Sub
End Class
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 06.06.2007 (Ср) 9:22

Просто в программе необходимо создавать блоки, которые перемещаются по форме и все данные этих блоков необходимо заносить в массив, из которого потом можно было бы загрузить все эти данные.

Какие блоки? Контролов? Каких? Они всегда сгруппированны или могут быть разбросаны по форме? Что в итоге ты хочешь добиться?
Я не знаю как остальные, но я точно не телепат. Чем дольше ты будешь думать над формулировкой вопросов, отправляемых на форум, тем быстрее получишь действительно правильный ответ.
Иначе ты и сам запутаешься и других запутаешь.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Foxen
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 04.06.2007 (Пн) 0:20
Откуда: Уфа

Сообщение Foxen » 06.06.2007 (Ср) 19:12

Nord777 писал(а):Какие блоки? Контролов? Каких? Они всегда сгруппированны или могут быть разбросаны по форме? Что в итоге ты хочешь добиться?
Я не знаю как остальные, но я точно не телепат. Чем дольше ты будешь думать над формулировкой вопросов, отправляемых на форум, тем быстрее получишь действительно правильный ответ.
Иначе ты и сам запутаешься и других запутаешь.


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

Так вот Блоки - это наследственный клас "label", блоки должны перемещаться по форме, изменять размер, иметь свойства и т.д. Ну что то вроде Visio, только не столь громоздкое =)

Пользователь имеет возможность добавлять блок в любое момент, так вот после добавления контрола надо его переместить, для этого меняются координаты Блока (т.е. лейбла), для я его перерисовываю в form_Paint, a с одним экземляром класа это легко, но при не ограниченном количестве блоков, нужна возможность обращаться к любому вновь созданному блоку из главной формы.

Т.е. у меня происходит динамическое создание блоков (Label), и мне нужно обратиться потом к этим блокам, мн самое главное пока как из главной формы, обратиться к вновь созданному экземпляру класса.
90% всех ошибок сидят в полуметре от монитора...
Я бы изменил мир, но Бог не даёт исходников, а дьявол все время что-то кодит...

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 06.06.2007 (Ср) 21:35

У тебя наверное талант....
Я всё равно ничего не понял. Вообще последнее время на форуме часто обсуждались подобные вещи. Тут даже поиск не нужен, просто просмотри последние 20-30 тем, наверняка найдешь что то полезное для себя.

Код: Выделить всё
        'добавление
        For i As Integer = 1 To 5
            Dim L As New MyLabel()
            L.Location = New Point(10, i * 25)
            Me.Controls.Add(L)
        Next

        'обращение
        For Each C As Control In Me.Controls
            If TypeOf C Is MyLabel Then
                CType(C, MyLabel).Text &= "MyLabel"
            End If
        Next


Можно еще идентифицировать свои контролы по свойству Tag, по имени контрола, можно добавить свои контролы в массив и перебирать их в этом массиве. Вариантов много. И повторюсь - это всё из недавних обсуждений.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Foxen
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 04.06.2007 (Пн) 0:20
Откуда: Уфа

Сообщение Foxen » 06.06.2007 (Ср) 23:19

У тебя наверное талант....

Наверно :D

За код спасибо)) Примерно это мне и нужно было, только надо будет немного модифицировать... :)
Остальное тоже почитаем :D
90% всех ошибок сидят в полуметре от монитора...
Я бы изменил мир, но Бог не даёт исходников, а дьявол все время что-то кодит...

Foxen
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 04.06.2007 (Пн) 0:20
Откуда: Уфа

Сообщение Foxen » 06.06.2007 (Ср) 23:26

Кстати еще есть один вопрос, хотя он не очень по этой теме. :lol:

Программа у меня отображается норм, а у других почему то весь фон формы черный, может это зависеть от того что у меня Framework 3.0, а других кому давал Framework 2.0
90% всех ошибок сидят в полуметре от монитора...
Я бы изменил мир, но Бог не даёт исходников, а дьявол все время что-то кодит...

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 28.10.2007 (Вс) 13:57

Возникла проблема :(
При запуске контролла(все того же) на машине без VB, ругается, не находит картинки ползунков :( Как быть?
Вложения
error.jpg
Ошибка
error.jpg (30.58 Кб) Просмотров: 3108
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 28.10.2007 (Вс) 15:23

может не там ищет ? ты код хоть смотрел?

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 28.10.2007 (Вс) 15:47

Эм... Я его и писал... Картинку, по сценарию, он должен брать из ресурсов, но почему-то не находит :(
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 28.10.2007 (Вс) 18:26

Alex[fj] писал(а):Эм... Я его и писал... Картинку, по сценарию, он должен брать из ресурсов, но почему-то не находит :(

ну тогда сорри. Код в студию :)

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 31.10.2007 (Ср) 8:59

Попробуй найти эти картинки у себя на компе, и загнать их в инсталлятор.
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Пред.След.

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

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

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

    TopList