在标签之间切换时执行一些操作?

Posted

技术标签:

【中文标题】在标签之间切换时执行一些操作?【英文标题】:Perform some action when tabbing between labels? 【发布时间】:2013-04-17 12:59:09 【问题描述】:

我知道标签无法获得焦点,它似乎对标签切换没有响应。但是我需要的只是当用户在只有标签的表单上使用选项卡时执行一些操作。例如,每个标签都有一个关联的文本框,但当标签可见时,此文本框会隐藏,反之亦然。我想要的是允许用户使用选项卡在表单上的隐藏文本框之间切换,通常,所有文本框都被隐藏,而所有标签都显示,标签应该是可聚焦的,这样在使用选项卡时,它可以知道(作为某些事件)显示关联文本框并隐藏自身,当切换到另一个标签时,显示关联文本框的当前标签将再次可见,其关联文本框将变为隐藏。

我必须实现这种 2 合 1 控件(复合控件中的文本框和标签),因为我只想显示文本(没有边框和背景),就好像文本框有透明背景一样,只显示当用户需要编辑(通过单击字段或使用选项卡开始)时,文本框(并隐藏标签)。如果有一个透明的背景文本框,但在 Windows 窗体的世界中没有一个像样的文本框,这对我来说应该更容易。请注意,我也知道 在 codeproject 的一篇文章中呈现的 alpha 混合透明文本框,但它不能满足我的需要,因为文本呈现错误,文本路径周围有丑陋的边框(某种缺少抗锯齿,但比这更糟糕)。

如果这个机制不能实现,我真的很遗憾,当所有字段似乎只显示信息但点击或标签切换可以让用户跳转到编辑模式时,表单看起来更好。 我希望那里有一些解决方案。提前谢谢你。

【问题讨论】:

您是否有一些渐变或图片背景,这意味着您不能只使用普通文本框并设置背景颜色和边框样式? 你不能只监控按键吗? @JamesB 是的,文本框的父背景是渐变的(不是纯色),因此根据父背景更改文本框的背景色无济于事。 @DeeMac 我想到了这个想法,但是当我必须向 TAB 和 SHIFT + TAB 添加侦听器并记住当前位置时,实现有点复杂,为我自己的控件实现某种 Tab 索引在表格上。我还没有尝试过,因为希望有一些更清洁的解决方案。谢谢。 其实并不复杂。您不能在标签之间切换,TabStop 等相关属性在该类上无用。您所要做的就是监视当前可见的控件上的 tab 键(据我所知,一次只会显示一个文本框)。 【参考方案1】:

我一时兴起找到了这个解决方案。我不认为有这样的解决方案,但它确实有助于解决我的问题(我相信许多其他人会从中受益)。只需创建我自己的继承 UserControl 的标签。我之前没有想到UserControl,它很有帮助。 UserControl 可以轻松实现可聚焦性、透明背景、无边框。我必须自己做的唯一自定义功能是渲染文本,这也很简单,有很多方法可以做。我只是在UserControl中添加了一个Label,并将Label的Dock设置为DockStyle.Fill,适当调整UserControl的高度就可以了。

感谢上帝在尝试任何其他复杂的解决方案(例如收听 TAB 和 SHIFT + TAB 按键事件)之前帮助我考虑 UserControl。

【讨论】:

以上是关于在标签之间切换时执行一些操作?的主要内容,如果未能解决你的问题,请参考以下文章

在选项卡之间切换时如何创建交叉溶解动画

使用 Seaborn 设置轴标签之间的距离

Android中切换标签片段之间的延迟

切换视图时标签栏丢失

Iterm2 快捷操作

关于浏览器切换标签或者移动端切换应用时,js不执行的解决方案