[英]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.