Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 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-сайт: kg7.ru
 Профиль | | #2
Добавлено: 19.03.09 12:58
Для получения клавишь по-моему тут достаточно keyPreview на форме поставить.

Ответить

Номер ответа: 3
Автор ответа:
 Kardinal



ICQ: 360041513 

Вопросов: 1
Ответов: 164
 Web-сайт: kg7.ru
 Профиль | | #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
ну и жми, в чем проблема-то
  1. Private Sub Command1_Click()
  2. dim cn as control
  3. on error resume next
  4. for each CN in me.controls
  5.   cn.enabled=false:if err then err.clear
  6. next cn
  7. End Sub

Ответить

Номер ответа: 11
Автор ответа:
 Tur



ICQ: 201446364 

Вопросов: 22
Ответов: 72
 Профиль | | #11 Добавлено: 19.03.09 14:09
Это не решение. Я не могу себе позволить такую роскошь делать все контролы нерабочими. Ход моей мысли прост. Есть окно Form1. Почему же нельзя на это родительское окно (а не на дочерние контролы) перевести фокус? Разве этого Windows не позволяет?

Ответить

Номер ответа: 12
Автор ответа:
 maza_____



ICQ: 9968842 

Вопросов: 40
Ответов: 337
 Web-сайт: vkontakte.ru/id25563295 добавляйтесь в друзья))
 Профиль | | #12
Добавлено: 19.03.09 15:09
  1. VB.NET
  2. Public Class Form1
  3.     Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
  4.         Label1.Text = e.KeyCode
  5.     End Sub
  6.  
  7.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  8.         For Each item As Control In Me.Controls
  9.             If TypeOf item Is Button Then
  10.                 AddHandler item.KeyDown, AddressOf Form1_KeyDown
  11.             End If
  12.         Next
  13.     End Sub
  14. End Class

Ответить

Номер ответа: 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-сайт: kg7.ru
 Профиль | | #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

Ответить

Страница: 1 |

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



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