簡體   English   中英

如何捕獲鼠標的“后退”按鈕並使它執行其他操作?

[英]How do I capture mouse “back” button and cause it to do something else?

我有一個正在使用的Windows 8.1通用應用程序,並且所有頁面都在根Frame對象的“內部”。

登陸頁面是主頁,用戶可以從5個不同的頁面中進行選擇。 當用戶轉到這些頁面之一時,頁面上將帶有“主頁”按鈕,以將其帶回到主頁。

我最近發現,如果鼠標上帶有后退按鈕,它將回到上次訪問的頁面。 這種返回首頁的方法繞過了應用程序必需的一些邏輯。

是否可以“禁用”鼠標上的這些前進和后退按鈕的任何操作? 如果不可能,是否可以捕獲該事件並將其重定向到具有必要邏輯的方法?

謝謝,
扎克

我認為您正在尋找導航服務的概念。

而且,該MSDN文章應該可以幫助您管理向后導航。

VK_XBUTTON1和VK_XBUTTON2。 這些是其他鼠標按鈕的常量,這些常量通常分配給前進和后退導航。

如果要立即處理X按鈕消息,請使用WM_XBUTTONDOWN和WM_XBUTTONUP將它們發布到您的應用程序中。

在這里檢查: https : //msdn.microsoft.com/en-us/library/windows/desktop/dd375731.aspx

編輯:我只是注意到,這個問題是關於“通用應用程序”的,此示例適用於WinForms,但對於查找通用或UWP應用程序的答案可能會有所幫助...

假設您在按鈕上已經有兩個事件處理程序可以向后導航( void NavigateBack(object sender, EventArgs e) )和向前void NavigateForward(object sender, EventArgs e)

首先將此代碼段添加到您的表單代碼中:

private void HandlePreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.XButton1:
            NavigateBack(sender, e); // call the back button event handler
            break;
        case Keys.XButton2:
            NavigateForward(sender, e); // call the forward button event handler
            break;
    }
}

private void HandleMouseDown(object sender, MouseEventArgs e)
{
    switch (e.Button)
    {
        case MouseButtons.XButton1:
            NavigateBack(sender, e); // call the back button event handler
            break;
        case MouseButtons.XButton2:
            NavigateForward(sender, e); // call the forward button event handler
            break;
    }
}

然后轉到設計器視圖,遍歷窗體上的所有主要控件,並將PreviewKeyDown和MouseDown事件連接到相應的方法。

更好的方法(面向未來)是編寫代碼以遞歸方式連接事件,如下所示:

private void HookupNavigationButtons(Control ctrl)
{
    for (int t = ctrl.Controls.Count - 1; t >= 0; t--)
    {
        Control c = ctrl.Controls[t];
        c.PreviewKeyDown -= HandlePreviewKeyDown;
        c.PreviewKeyDown += HandlePreviewKeyDown;
        c.MouseDown -= HandleMouseDown;
        c.MouseDown += HandleMouseDown;
        HookupNavigationButtons(c);
    }
}

並在InitializeComponent();之后的某個地方調用該方法InitializeComponent(); HookupNavigationButtons(this);

如果只希望發生鼠標事件,則可以省略鍵盤內容,但是那里有一些鍵盤也具有這些導航按鈕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM