c# - 自定义控件上的可选覆盖
问题描述
我有一个自定义TabControl
代码,既可以防止用户使用 Tab 快捷方式进行导航,也可以删除选项卡标题。有一种情况,我仍然想阻止选项卡导航,但显示选项卡标题,所以我想为自定义控件创建一个属性,并且仅在此属性为时应用隐藏标题的代码true
,但我得到了从这里删除选项卡标题的解决方案,我不完全理解。
我尝试将代码放在if
我的属性中,但这会使我的视觉工作室崩溃。我想这是因为这样做我将使用空过程覆盖必要的代码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
尝试使用此方法。
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);
}
推荐阅读
- python - 将 Python Pandas 数据帧写入 CSV 文件时出现 Unicode 错误
- authentication - 使用 API 网关进行微服务身份验证
- css - 如何在不重复 mixin 的情况下将自定义材质主题包含到组件中:mat-core 和 angular-material-theme
- javascript - 如何使标签值在中继器中不可搜索?
- android - 尝试分享照片时出现异常
- ssas - 在缓慢变化的维度上使用 DAX 计算溢价总和时出错
- node.js - Mongodb Atlas 连接正在Maxing out。实例 M10(350 个并发连接)
- excel - VBA:将表格从 Excel 粘贴到 Word 在 Mac 上崩溃
- webpack - 带有 contenthash 的 webpack SSR 加载包
- java - Spring boot 2.0 服务:从 Rabbit mq 传递但未到达 java 代码的消息