我有两种形式,第一种是frmballoon,第二种是frmballoon。我改变了两种形式的焦点,第一种是frmbase,然后是frmballoon(frmbase不可见),然后是frmbase。现在我需要一个事件,先是frmbase加载,然后是frmballoon不可见后再次显示。
所以我需要当形式变得集中时发生的事件……。

最佳答案

你在追求什么?
我建议这样做而不是Form.Activated的原因是,如果焦点从一个窗体变为另一个窗体上的控件,则窗体本身不会获得焦点。下面是一个示例应用程序:

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);
    }
}

(将其构建为控制台应用程序-这是输出的位置。)
在文本框中输入一些名称,然后单击“新建表单”-然后再次执行此操作。现在在新表单的文本框之间单击-您将看到GotFocus事件被触发,但不是Activated

08-07 06:13