Фокусы формы при изменении её Enabled`а

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Фокусы формы при изменении её Enabled`а

Сообщение MIT » 29.01.2010 (Пт) 1:26

Несмотря на то, что мой вопрос не относится непосредственно к VB6, да и пишу я не на VB6, задам я его имеено здесь, т.к. этот раздел более популярен, да и помощь может подоспеть от Хакера, которого в дотнетном разделе не дозовешся.

Собственно, в чем проблема: есть форма (WS_EX_LAYERED), которая довольно странно ведет себя при изменении свойства Enabled. Если при установке этого свойства в False происходит то что должно происходить, то при возвращении свойства в True форма, помимо отработки всего нужного кода, почему-то "уходит" по ZOrder`у в самую глубь — под все имеющиеся окна. Использование совместно с изменением значения свойста функции SetForegroundWindow не катит.

Вопрос: с чем это может быть связано? Отмечу, что никаких манипуляций с фокусом с моей стороны не проиходит.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Фокусы формы при изменении её Enabled`а

Сообщение Twister » 29.01.2010 (Пт) 6:32

Что за форма? Как создается? Как устанавливается Enabled?
Нужны данные для эксперимента.
А я все практикую лечение травами...

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Фокусы формы при изменении её Enabled`а

Сообщение MIT » 29.01.2010 (Пт) 10:28

Поэксперементировал сейчас сам немного. Я думал что это из-за стилей окна, а оказалось что и нет.
Что делаем: имея два потока, в первом из них пишем Me.Enabled = False, запускаем второй; второй отображает MsgBox, по нажатию на кнопку поток завершается, вызывается процедура из первого потока, которая делает Me.Enabled = True. Собственно и всё. Правда форма прячется при закрытии MsgBox`а, а не при Me.Enabled = True, как я полагал изначально, однако фишка в том, что если Me.Enabled = False не делать, то ничего необычного не происходит.

Если кому интересно, вот НЕТный код:
Код: Выделить всё
Imports System.ComponentModel

Public Class Form1
   Dim WithEvents bw As BackgroundWorker

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      bw = New BackgroundWorker
   End Sub

   Private Sub bw_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bw.DoWork
      MsgBox("???", MsgBoxStyle.Question Or MsgBoxStyle.YesNo, "!!!")
   End Sub
   Private Sub bw_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bw.RunWorkerCompleted
      'Me.Enabled = True
   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      Me.Enabled = False
      bw.RunWorkerAsync()
   End Sub
End Class
(Form1_Load, bw_RunWorkerCompleted и Button1_Click выполняются в первом потоке, bw_DoWork - во втором)

P.S. А тему наверно можно куда-нибудь переместить (в трёп?), ибо к VB6 она со своей многопоточностью уже никак не относится.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Фокусы формы при изменении её Enabled`а

Сообщение MIT » 29.01.2010 (Пт) 20:13

Решил использованием API`шно-импортированной функцией + указанием в качестве родителя главной формы.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 63

    TopList