Создать дочернюю форму без фокуса

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

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

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

Создать дочернюю форму без фокуса

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

Собственно сабж. Немного поясню: есть форма, которая при обработке некоего события (пусть это будет клик) создает дочернюю форму. Надо сделать так, что бы создаваемая форма не получила фокус после создания. Сейчас обхожусь так:
Код: Выделить всё
frm.Show
Me.Focus
что, в общем-то эквивалентно, но тогда прихоисходит лишнее событие LostFocus, чего необходимо избежать.

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

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

Re: Создать дочернюю форму без фокуса

Сообщение MIT » 23.02.2009 (Пн) 13:53

Форма создается с такими параметрами:
Код: Выделить всё
    Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.ExStyle = (cp.ExStyle Or 524288 Or &H80)
            Return cp
        End Get
    End Property


Попробовал следующие методы:
Код: Выделить всё
    Protected Overrides ReadOnly Property ShowWithoutActivation() As Boolean
        Get
            Return True
        End Get
    End Property

Код: Выделить всё
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If m.Msg = WM_MOUSEACTIVATE Then
            m.Result = MA_NOACTIVATE
            Return
        End If
        MyBase.WndProc(m)
    End Sub

Код: Выделить всё
    Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.ExStyle = (cp.ExStyle Or 524288 Or &H80 Or 4 Or &H10)
            Return cp
        End Get
    End Property

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

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

Re: Создать дочернюю форму без фокуса

Сообщение MIT » 24.02.2009 (Вт) 20:57

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


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

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

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

    TopList