Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 |

 

  Вопрос: Неразрешимая проблема? (WithEvents) Добавлено: 03.11.04 22:16  

Автор вопроса:  Yxine H.W. | Web-сайт: www.gsmmix.ru | ICQ: 479471 

Ответить

  Ответы Всего ответов: 50  

Номер ответа: 31
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #31 Добавлено: 05.11.04 13:33
Ну так оно и есть. Посему я повторюсь - CreateWindowEx + Static. На VB далеко не уедешь.
Кстати, интересно. В Static есть STN_CLICKED и STN_DBLCLK. А как VB обрабатывает события Label? Неужто через Form_Click и координаты?

Ответить

Номер ответа: 32
Автор ответа:
 Nash Bridges



Вопросов: 5
Ответов: 139
 Профиль | | #32 Добавлено: 05.11.04 14:09
Похоже, msvbvm просто на hDC формы рисует текст, не более того. И называет кусок своего rect'a "контролом".


Именно. Только этот кусок ректа называется windowless control.

Я ему про вб лейбл, а он мне про статик. Это вообще нормально?

А кроме юзерконтролов других нет?

Как раз кроме винконтролов другие есть. Об этом тебе и говорят.

Ведь это ты меня за такого дурака держишь.


Это не так. Но то, что ты не можешь принимать, что тебе говорят - факт.

Ответить

Номер ответа: 33
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #33 Добавлено: 05.11.04 14:17

Именно. Только этот кусок ректа называется windowless control.

Я ему про вб лейбл, а он мне про статик. Это вообще нормально?

Номально. Я тебе уже говорил - CreateWindowEx + Static - вот тебе и Label. Никаких вб-шных извратов. АПИ рулит.

Как раз кроме винконтролов другие есть. Об этом тебе и говорят.

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

Но то, что ты не можешь принимать, что тебе говорят - факт.

Да потому что говоришь ты не в тему. Раздул из вопроса на два поста целую дискуссию на три страницы. Надо это было? На поставленный автором вопрос ответили еще на первой. А какие там еще бывают контролы и как их там заморачивать - это уже, извини, оффтоп.

Ответить

Номер ответа: 34
Автор ответа:
 crackoff



ICQ: 156165990 

Вопросов: 12
Ответов: 229
 Профиль | | #34 Добавлено: 05.11.04 14:21
>Есть такая утилита SPY++, так она Label вообще не видит, ни hWnd, ни класс этого label'a, ни вообще, что оно существует. Похоже, msvbvm просто на hDC формы рисует текст, не более того. И называет кусок своего rect'a "контролом".

Так и есть. Тебе от этого хуже?

>А вообще static - хорошая вещь, те то что label :)

AFAIK абсолютно одно и тоже

Ответить

Номер ответа: 35
Автор ответа:
 Nash Bridges



Вопросов: 5
Ответов: 139
 Профиль | | #35 Добавлено: 05.11.04 14:33
И вообще:
1. Я дал исчерпывающий ответ на вопрос в первом же посте. И не на первой странице, а в первом посте. Все остальное флуд.
2. Разговор зашел про лейбл. Его тоже оказывается можно сабклассить. Т.к. это статик. Когда оказалось, что это не статик, то появилась мысль, что лейблы юзать не нужно, а нужно юзать статики.
3. Контрол про погоду я так понимаю, тоже юзать не надо, т.к. он левый и не сабкласситься.
4. И конечно, класс - это пошло. Только вот уровня абстракции без них не достичь. А сейчас без абстракции никуда. Никому не нужно создание статиков и их сабклассинг. Всем нужно знать, что погода изменилась.

Последняя мысль - достаточно глубокая. Если сразу не понятно, то через некоторое время станет понятно. Если нет, тогда лучше менять специальность.

Все. Я выступление закончил. Оставайся со своим мнением:)

Ответить

Номер ответа: 36
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #36 Добавлено: 05.11.04 14:39
Если юзать Label как, собственно, Label, то есть никаких событий не обрабатывать, то разница невелика.
Конечно, через АПИ вбшный лэйбл, собственно, не создать, а следовательно, и набор стилей поменьше.
Кроме того, вбшный лейбл труднее сабклассировать, однако это требуется только в подобной ситуации, когда требуется объявить их массив с WithEvents.
Представить себе необходимость такого решения достаточно сложно.
А в целом - да, одно и то же.

Ответить

Номер ответа: 37
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #37 Добавлено: 05.11.04 14:52
1. Да, ответ действительно был исчерпывающим. Зато все остальные - гон. Да и первый не дал абсолютно ничего.
2. Да, и лейбл можно сабклассить. Но лучше это делать через статик. Для пользователя это одно и то же.
3. Контрол про погоду может и не левый, но немного из другой оперы. Десять раз тебя просил - прочти что требуется в вопросе. Интересен контрол про погоду - вынеси его в отдельный топик.
4. См. пункт 3.

Никому не нужно создание статиков и их сабклассинг. Всем нужно знать, что погода изменилась.
Последняя мысль - достаточно глубокая. Если сразу не понятно, то через некоторое время станет понятно. Если нет, тогда лучше менять специальность.

Вот тебе точно пора менять профессию. Подайся в политики, будешь представлять интересы миллионов избирателей. А до тех пор либо отвечай на поставленный вопрос по существу, либо не флудь форум.

Все. Я выступление закончил. Оставайся со своим мнением:)

Бурные овации восхищенной публики!

Ответить

Номер ответа: 38
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #38 Добавлено: 05.11.04 15:05
Подозреваю что все равно придется повториться. Так что сделаю это сразу.
Пост 12. Ответ автора вопроса:

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

Код для формы Form1 (на ней лежит собственный конрол FormEx):

Option Explicit

Код контрола FormEx:

Option Explicit
Private WithEvents Button0 As CommandButton
Private WithEvents Button1 As CommandButton
Private WithEvents ParentFrm As Form
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
    On Error Resume Next
    Set ParentFrm = Parent
End Sub
Private Sub ParentFrm_load()
    On Error Resume Next
    Set Button0 = ParentFrm.Controls.Add("VB.CommandButton", "Button0", ParentFrm)
    With Button0
        .Left = 10
        .Top = 10
        .Caption="Номер 0"
        .Visible = True
        .ZOrder 0
    End With
    Set Button1 = ParentFrm.Controls.Add("VB.CommandButton", "Button1", ParentFrm)
    With Button1
        .Left = 100
        .Top = 100
        .Caption="Номер 1"
        .Visible = True
        .ZOrder 0
    End With
End Sub
Private Button0_Click()
    msgbox("Нажата 0";)
End if
Private Button1_Click()
    msgbox("Нажата 1";)
End if

Что делает: при запуске Form1 на ней (через компонент FormEx) автоматически создаются две кнопки.

Так вот замечательно было бы объединить Button1 и Button2 в один элемент управления, скажем с именем Button и

индексами 0 и 1 соответственно. Тогда бы событие Click выглядело бы так:


Private Button_Click(index as integer)
    msgbox("Надата " & index)
end sub

Что есть намного лучше чем первый вариант! Но как этот грёбаный Index вмутить inside неизвестно (и вообще можно

ли?).

2LamerOnLine: please, про Load {controlname(index)} не надо больше писать. Это всё даже начинающие знают.
А вот насчёт сабклассинга, то можно ли поподробнее? Хотя бы для приведённого выше примера, а то у меня уже голова

болит думать :)
---------------------------

Насчет индекса с WithEvents мы сошлись во мнениях. Никак. Рассматриваем другие методы решения ЭТОЙ задачи...

Ответить

Номер ответа: 39
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #39 Добавлено: 05.11.04 15:19
Да, забыл выделить жирным шрифтом слова разобраться что вообще надо.

Речь идёт о любом стандартном контроле.

Тут, надеюсь, все понятно.

Хотя usercontrol также можно добавить, это не сложно.

Добавить несложно. Сложно будет с WithEvents, но это был гипотетический вопрос.

Неоконные контролы тоже надо взять в рассчёт (Label, например)!

Согласен, я был не совсем прав с Label, поскольку никогда не пользовался этим угробищем для таких задач, но предложенный мной метод со Static все же был правильным.
По крайней мере, это все работает.
2Nash Bridges - http://www.humanities.edu.ru/db/msg/2792 - форум по философии.

Ответить

Номер ответа: 40
Автор ответа:
 BNX



ICQ: 250394886 

Вопросов: 1
Ответов: 35
 Web-сайт: vbnet.ru
 Профиль | | #40
Добавлено: 05.11.04 15:23
некаким макаром

Ответить

Номер ответа: 41
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #41 Добавлено: 05.11.04 16:08
Ну все, хватит спорить. Уверен, Nash Bridges, конечно, прав, но дюжа все усложняет. Для частного случая остановимся на чем попроще. Просто это повальное увлечение ООП начинает раздражать. Да, приятнее работать с сообщениями о погоде чем с виндовскими каракулями, но откровенно говоря, из-за подобных абстракционистов нынешние программы, которые уступают качеством продуктам 5 давности, тормозят на четвертых пнях...
Надеюсь на этом мы закончили. Меня до вторника в инете не будет, хотелось бы чтобы к тому времени эта ветка уже потонула.

Ответить

Номер ответа: 42
Автор ответа:
 Yxine H.W.



Разработчик Offline Client

ICQ: 479471 

Вопросов: 3
Ответов: 29
 Web-сайт: www.gsmmix.ru
 Профиль | | #42
Добавлено: 05.11.04 16:44
2LamerOnLine, спасибо за код, посмотрю поподробней чуть позже.
Тут закрался ещё один вопрос. Стандартные контролы это так себе, а вот как с помощью Controls.Add добавить на форму свой собственный UserControl с именем MyCtl, например?

Ответить

Номер ответа: 43
Автор ответа:
 Александр



Разработчик Offline Client

ICQ: 204034 

Вопросов: 106
Ответов: 1919
 Профиль | | #43 Добавлено: 06.11.04 08:26
BNX, хочешь чтобы Павел расчехлил чепушкопушку? :))
Если нет, и не хочешь на первых парах схватить череп, то...
Я давно за тобой наблюдаю...

Ответить

Номер ответа: 44
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #44
Добавлено: 06.11.04 08:50
 А ты не наблюдай, здоровее будешь.

Ответить

Номер ответа: 45
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #45 Добавлено: 06.11.04 10:20
Согласен глупо, смешно, но…

Код формы:

Option Explicit
    ;Dim btn() As New clsControls
    Private WithEvents ParentFrm As Form
Private Sub Form_Load()
    ReDim btn(1)
    Set ParentFrm = Me
    ParentFrm_load
End Sub
Private Sub ParentFrm_load()
    ;Dim i As Integer
    For i = 0 To 1
        Set btn(i).btn = ParentFrm.Controls.Add("VB.CommandButton", "Button" & i, ParentFrm)
        With btn(i).btn
            .Left = 10 * (i * 100)
            .Top = 10 * (i * 100)
            .Caption = "Button # " & i
            .Visible = True
        End With
    Next i
End Sub

Код модуля класса:

Option Explicit
Public WithEvents btn As CommandButton
Private Sub btn_Click()
    MsgBox "Name of the pressed button - " & btn.Name
End Sub

Ответить

Страница: 1 | 2 | 3 | 4 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам