0

ユーザー コントロール イベントが実行されない理由がわかりません。動的 UserControl "MainControl" 内に動的 UserControl "MainMenu" があります。

MainMenu には次のものがあります。

public partial class MainMenu : UserControl
{
    public MainMenu()
    {
        InitializeComponent();

        ///
        ///Event Subscriptions
        /// 
        this.LostFocus += this.MainMenu_LostFocus;
    }

    public void MainMenu_LostFocus(object sender, EventArgs e)
    {
        this.Visible = false;
    }
}

MainControl で:

public partial class MainControl : UserControl
{
    private Custom_UI.MainMenu mainMenu = new Custom_UI.MainMenu();
    public MainControl()
    {
        InitializeComponent();
        mainMenu.Visible = false;
        mainMenu.BringToFront();            
        this.Controls.Add(mainMenu);
        mainMenu.BringToFront();
    }
    private void menuButton1_Click(object sender, EventArgs e)
    {
        if (mainMenu.Visible)
        {
            mainMenu.Visible = false;                
        }
        else
        {
            mainMenu.Visible = true;
            this.Focus();
        }
    }
}

そして最後にメインフォーム:

public partial class Form1 : Form
{
    MainControl mainControl = new MainControl() {
        Dock = DockStyle.Fill
    };
    public Form1()
    {
        InitializeComponent();
        this.Controls.Add(mainControl);
    }
}

したがって、基本的にMainMenu_LostFocus、フォームの他の場所をクリックしてもメソッドは呼び出されません。this.MouseLeaveの代わりに使ってみましthis.LostFocusた。

うまくいけば、これで十分に明確になりました。事前に感謝します。

4

2 に答える 2

0

フォーカス/フォーカスロストなどを使用するのは常に注意が必要でした。私が提案できるのは、コードを少し変更することです。

まず第一に、MainMenuそれを失うために集中する必要があります

第二に、それを失うには、別のコントロールがフォーカスを取得する必要があります-これはあなたが処理する必要があります(クリックするだけでは機能しMainControlません。強制する必要があります)

これを試して:

public partial class MainControl : UserControl
{
    private Custom_UI.MainMenu mainMenu = new Custom_UI.MainMenu();
    public MainControl()
    {
        InitializeComponent();
        mainMenu.Visible = false;
        mainMenu.BringToFront();            
        this.Controls.Add(mainMenu);
        mainMenu.BringToFront();
        this.Click += me_Click;
    }

    private void me_Click(object sender, EventArgs e)
    {
        this.Focus(); //this will cause main control to get control (if main menu is focused it'll lose focus and handle it's focus lost and set visible to false in result
    }

    private void menuButton1_Click(object sender, EventArgs e)
    {
        if (mainMenu.Visible)
        {
            mainMenu.Visible = false;   // this should work anyway
        }
        else
        {
            mainMenu.Visible = true;
            mainMenu.Focus(); //when showing mainMenu set focus to it
        }
    }
}
于 2018-04-25T22:47:59.870 に答える