2009-12-30 5 views
2

У меня две формы: frmBase, а вторая - frmBalloon.I изменяют фокус обеих форм, которые отображаются сначала frmBase, тогда отображается frmBalloon (frmBase не отображается), а затем снова отображается frmBase . Теперь мне нужно событие, которое происходит с первой загрузкой frmBase, а затем снова, когда оно отображается после того, как frmBalloon становится невидимым.Событие, которое происходит, когда форма сфокусирована

Так мне нужно событие, которое происходит, когда форма становится сосредоточена .......

+0

Вы переключаетесь между этими двумя формами один за другим, используя кнопку на каждой форме, которая открывает другую? – A9S6

+0

Если вы открываете/показываете форму с помощью ShowDialog() каждый раз, то можно использовать событие Form_Load. Как вы переключаетесь между формами? – A9S6

ответ

14

ли Form.Activated что вы после этого?

Моя причина предположить это, а не GotFocus является то, что форма сама не получает фокус, если фокус перемещается из одной формы в элемент управления в другой форме. Вот пример приложение:

using System; 
using System.Drawing; 
using System.Windows.Forms; 

class Test 
{ 
    static void Main() 
    { 

     TextBox tb = new TextBox(); 
     Button button = new Button 
     { 
      Location = new Point(0, 30), 
      Text = "New form" 
     }; 
     button.Click += (sender, args) => 
     { 
      string name = tb.Text; 
      Form f = new Form(); 
      f.Controls.Add(new Label { Text = name }); 
      f.Activated += (s, a) => Console.WriteLine("Activated: " + name); 
      f.GotFocus += (s, a) => Console.WriteLine("GotFocus: " + name); 
      f.Show(); 
      f.Controls.Add(new TextBox { Location = new Point(0, 30) }); 
     }; 

     Form master = new Form { Controls = { tb, button } }; 
     Application.Run(master); 
    } 
} 

(Построить это как консольное приложение - вот где выход идет.)

Положите некоторое имя в текстовом поле и нажмите кнопку «новую форму» - то сделать это снова. Теперь щелкните между текстовыми полями в новой форме - вы увидите, что событие Activated запускается, но не GotFocus.

+0

Нет, это не работает для моего, потому что я хочу событие, которое происходит только тогда, когда оно сфокусировано. – Harikrishna

+0

Когда он будет активирован без фокуса? –

+0

Привет, Джон. Любопытно, активирует ли событие Activated каждый раз, когда вы что-то делаете в своей форме? Если у моей формы есть фокус, и я нажимаю на нее несколько раз, срабатывает ли событие Activate для каждого клика? – BenM

1

Событие Form.GotFocus.

+0

Есть ли в списке событий окно свойств? – Harikrishna

+0

Работает ли он для формы? – Harikrishna

+0

Да, он работает для формы. Он должен быть в списке событий, но вы всегда можете его напрямую запрограммировать: 'myForm.GotFocus + = event_handler;' – Oded

1

Как насчет GotFocus event?

Обратите внимание, что событие GotFocus по контролю (из которого форма получено, поэтому он применяется здесь) помечается BrowsableAttribute, передавая значение лжи в constructor, поэтому не видны в окне свойств.

Вы должны добавить обработчик события вручную в код за пределами созданного конструктором кода.

+0

Является ли это в списке событий окна свойств? – Harikrishna

0

Ну, я не знаю, пять лет назад, но в настоящее время:

enter image description here

Enter событие делает работу.

Смежные вопросы