Страница: 1 |
Страница: 1 |
Вопрос: Фокус на окне
Добавлено: 19.03.09 12:40
Автор вопроса: Tur | ICQ: 201446364
На Form1 есть Label1. В Form1 пишем
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Label1 = KeyCode
End Sub
Это вся наша программа. Запускаем ее и нажимаем клавиши. Насладились KeyCode-дами на Label1.
Добавляем на Form1 кнопку Command1 и снова запускаем программу. Замечаем странную картину: фокус не на форме, а на Command1. Поэтому сколько на клавиши ни нажимать новых KeyCode-дов на Label1 не увидеть.
Дело поправимо. Пишем в Form1
Private Sub Form_Load()
Form1.Show
Form1.SetFocus
End Sub
Оказывается это не работает, фокус на Form1 не переводится. Не помогает здесь и API SetFocus.
А самое интересное, что и клик мышкой на Form1 не переводит на него фокус. Фокус железно сидит на Command1.
Вопрос: что надо написать под кнопкой Command1 чтобы после нажатия на нее фокус переводился на Form1, т.е. чтобы после нажатия на кнопку можно было нажимать клавиши на клавиатуре и видеть их KeyCode на Label1 ?
Ответы
Всего ответов: 15
Номер ответа: 1
Автор ответа:
Tur
ICQ: 201446364
Вопросов: 22
Ответов: 72
Профиль | | #1
Добавлено: 19.03.09 12:51
Если добавить
Private Sub Command1_Click()
Dim i As Long
Command1.Visible = False
For i = 1 To 1000000
DoEvents
Next
Command1.Visible = True
End Sub
то фокус возвращается на окно только на момент пропадания кнопки, а когда кнопка появляется вновь, то она появляется не одна, а вместе с фокусом на ней.
Если добавить еще одну кнопку Command2, то легко на нее перевести фокус
Private Sub Command1_Click()
Command2.SetFocus
End Sub
или так
Private Sub Command1_Click()
Command1.Visible = False
End Sub
Но перевести фокус на Form1 так чтобы и Command1 и Command2 оставались видимыми не удается. Что же делать? Как программно перевести фокус с кнопки на Form1?
Номер ответа: 2
Автор ответа:
Kardinal
ICQ: 360041513
Вопросов: 1
Ответов: 164
Web-сайт:
Профиль | | #2
Добавлено: 19.03.09 12:58
Для получения клавишь по-моему тут достаточно keyPreview на форме поставить.
Номер ответа: 3
Автор ответа:
Kardinal
ICQ: 360041513
Вопросов: 1
Ответов: 164
Web-сайт:
Профиль | | #3
Добавлено: 19.03.09 12:59
2. Поставить tabStop=false на кнопке и у неё не будет фокуса
Номер ответа: 4
Автор ответа:
Tur
ICQ: 201446364
Вопросов: 22
Ответов: 72
Профиль | | #4
Добавлено: 19.03.09 13:02
Kardinal, мой вопрос не про клавиши. Клавиши мне понадобились лишь для пояснения вопроса.
Мой вопрос такой: Как программно перевести фокус с кнопки на ту форму, на которой находится эта кнопка?
Номер ответа: 5
Автор ответа:
Tur
ICQ: 201446364
Вопросов: 22
Ответов: 72
Профиль | | #5
Добавлено: 19.03.09 13:06
Если кнопка одна, то tabStop=false не помогает, фокус по прежнему на кнопке.
Что надо написать под кнопкой чтобы после ее нажатия фокус перешел бы на форму?
Номер ответа: 6
Автор ответа:
fAndOrIn
Вопросов: 5
Ответов: 344
Профиль | | #6
Добавлено: 19.03.09 13:07
Command1.enabled=false - видима и без фокуса (хотя зачем она такая?).
Номер ответа: 7
Автор ответа:
Tur
ICQ: 201446364
Вопросов: 22
Ответов: 72
Профиль | | #7
Добавлено: 19.03.09 13:10
fAndOrIn, да это не решение. Даже ведь и клик мышкой на форме не переводит на нее фокус. Вот ведь что!
Номер ответа: 8
Автор ответа:
fAndOrIn
Вопросов: 5
Ответов: 344
Профиль | | #8
Добавлено: 19.03.09 13:22
Выключи enabled у всех контролов, имеющих данное свойство и получишь фокус на форме без всяких кликаний.
Номер ответа: 9
Автор ответа:
Tur
ICQ: 201446364
Вопросов: 22
Ответов: 72
Профиль | | #9
Добавлено: 19.03.09 13:24
Мне же не просто надо получить фокус на форме, но получить его совершенно определенным способом: нажимая на кнопку.
Номер ответа: 10
Автор ответа:
fAndOrIn
Вопросов: 5
Ответов: 344
Профиль | | #10
Добавлено: 19.03.09 13:32
ну и жми, в чем проблема-то
Номер ответа: 11
Автор ответа:
Tur
ICQ: 201446364
Вопросов: 22
Ответов: 72
Профиль | | #11
Добавлено: 19.03.09 14:09
Это не решение. Я не могу себе позволить такую роскошь делать все контролы нерабочими. Ход моей мысли прост. Есть окно Form1. Почему же нельзя на это родительское окно (а не на дочерние контролы) перевести фокус? Разве этого Windows не позволяет?
Номер ответа: 12
Автор ответа:
maza_____
ICQ: 9968842
Вопросов: 40
Ответов: 337
Web-сайт:
Профиль | | #12
Добавлено: 19.03.09 15:09
Номер ответа: 13
Автор ответа:
Tur
ICQ: 201446364
Вопросов: 22
Ответов: 72
Профиль | | #13
Добавлено: 19.03.09 15:39
maza, спасибо, но, как выясняется, я почему то не выразил то, что мне нужно.
Я пишу в матлабе. Моя проблема в нем. Для удобства работы надо чтобы фокус после каждой процедуры программы обработки данных устанавливался на основной фигуре. Для этого там есть команда которая в применении к родительской фигуре не работает. Я думал что это можно решить вызовом API SetFocus и сделал это подключив эту API к своему осх-у написанному на vb и встроенному в матлаб. Оказалось что этот API проблему не решил. Я полез в сам vb и увидел, что эта проблема есть и там, что и описал выше.
Спрошу еще раз: как средствами API перевести фокус на родительское окно с определенным хэндлом, не на дочерние контролы, но на родительское окно? Неужели в Windows есть такие окна на которые нельзя перевести фокус?
Номер ответа: 14
Автор ответа:
Kardinal
ICQ: 360041513
Вопросов: 1
Ответов: 164
Web-сайт:
Профиль | | #14
Добавлено: 20.03.09 00:22
Не знаю, по-моему Фокус на окне и так есть(оно активно) и в ActiveForm будет форма, однако на ряду с формой есть активный контрол, а сама по себе форма не должна иметь активности если есть контролы....
Это мои рассуждения, так что прошу не основываться на них)))
Номер ответа: 15
Автор ответа:
Tur
ICQ: 201446364
Вопросов: 22
Ответов: 72
Профиль | | #15
Добавлено: 20.03.09 00:33
Активность окна и фокус - разные вещи. Вот посмотри еще в одном месте обсуждение той же темы http://forum.sources.ru/index.php?showtopic=267769&view=showall