簡體   English   中英

自定義控件上的可選覆蓋

[英]Optional Override on a custom control

我有一個自定義TabControl ,它的代碼既可以防止用戶使用 Tab 快捷方式進行導航,也可以刪除選項卡標題。 有一種情況,我仍然想阻止選項卡導航,但顯示選項卡標題,所以我想為自定義控件創建一個屬性,並且僅在此屬性為true時應用隱藏標題的代碼,但我得到了從這里刪除選項卡標題的解決方案,我不完全理解。

我嘗試將代碼放在帶有我的屬性的if中,但這會使我的視覺工作室崩潰。 我想這是因為這樣做我會在 useHide == false 時用一個空過程覆蓋必要的代碼,那么,當useHide == false useHide == false時,我該如何讓它運行常規繼承代碼而不是覆蓋它?

    public class ExTabControl : TabControl
    {
        private bool useHide = true;

        [Description("Hide tab headers."), Category("Appearance")]
        public bool UseHideTabs
        {
            get => useHide;
            set => useHide = value;
        }

        /// Intercept any key combinations that would change the active tab.
        protected override void OnKeyDown(KeyEventArgs e)
        {
            bool changeTabKeyCombination =
                (e.Control
                    && (e.KeyCode == Keys.Tab
                        || e.KeyCode == Keys.Next
                        || e.KeyCode == Keys.Prior));

            if (!changeTabKeyCombination)
            {
                base.OnKeyDown(e);
            }
        }

        private const int TCM_ADJUSTRECT = 0x1328;

        protected override void WndProc(ref Message m)
        {
            if (useHide == true)
            {
                // Hide the tab headers at run-time
                if (m.Msg == TCM_ADJUSTRECT && !DesignMode)
                {
                    m.Result = (IntPtr)1;
                    return;
                }

                // call the base class implementation
                base.WndProc(ref m);
            }
        }
    }

.NET 框架 4.7.2,Visual Studio 2019,Winforms 應用程序

useHide為 false 時,您缺少對基本方法的調用,請嘗試使用此方法。

protected override void WndProc(ref Message m)
{
    // Hide the tab headers at run-time
    if (useHide && m.Msg == TCM_ADJUSTRECT && !DesignMode)
    {
        m.Result = (IntPtr)1;
        return;
    }

    // call the base class implementation
    base.WndProc(ref m);
}

暫無
暫無

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

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