【问题标题】:C# - TabPage Color eventC# - TabPage 颜色事件
【发布时间】:2011-03-06 09:14:00
【问题描述】:

C# 当然不是我的强项,所以我感谢所有慷慨的人分享他们的知识。我正在使用 Windows 窗体,并且阅读了有关事件的内容,并在如何修改 TabControl 方面找到了一些极好的帮助,因此我可以有一个 OnDraw 事件,该事件将为选项卡添加一些颜色。

每个选项卡的颜色取决于连接变量的状态: 当前(绿色) 丢失(红色) 陈旧(黄色)

OnDraw 事件非常适合更新每个选项卡的颜色,但仅当用户选择要查看的不同选项卡时才会发生。

我希望在连接状态发生变化时更新每个选项卡的颜色。例如,假设 Tab#1 为绿色,但随后连接状态变为陈旧,因此现在该选项卡需要为黄色,但在用户单击不同的选项卡和 OnDraw 事件之前它不会变成那样的颜色被触发。

所以我想弄清楚如何做到这一点。当 OnDraw 事件被正常触发时(通过用户单击不同的选项卡),“DrawItemEventArgs”参数被传递到事件处理程序中。该变量已经填充了确定单击了哪个选项卡、该选项卡的边界等所需的相关数据。所以我不确定它来自哪里或如何以编程方式重新创建这样的调用以重新着色连接变量更改时的选项卡。

如果我需要澄清任何事情,请告诉我! 谢谢你。

【问题讨论】:

    标签: c# .net winforms gdi+


    【解决方案1】:

    您可以在控件上调用Invalidate() 来强制重绘。

    【讨论】:

    • 完美运行!起初是在寻找缺少的“使用”语句,但后来我发现是我的 TabControl 需要在 TabControl 类 (this.Invalidate()) 或我的表单 myTabControl.Invalidate() 中调用它;非常感谢!
    【解决方案2】:

    如果您在连接状态更改时触发了一个事件,您可以这样做

    InvalidateVisual()
    

    在该事件中的所有选项卡上。

    【讨论】:

    • 感谢您的意见! Invalidate() 对我来说似乎工作得很好,它和 InvalidateVisual() 之间有显着区别吗?
    • InvalidateVisual 是您在 WPF 中使用的,我的错误
    【解决方案3】:

    如果您想要持续刷新,那么您可能需要创建 System.Timers.Timer 对象。

    一旦您创建了一个 Timer 并将计时器刻度值设置为您需要的任何时间间隔(以毫秒为单位),它将定期触发 OnTimerTick 事件。从此事件中,您可以通过Invalidate() 方法触发对您的OnDraw 方法的调用。 Invalidate 告诉系统您的屏幕需要刷新,它会在下一个可用机会时调用 OnDraw 和 OnPaint。

    【讨论】:

    • 大家的反馈太快了,我很抱歉昨天没有回复你们三个——我没有机会尝试你的建议。 MikeD,我没有考虑过计时器。这肯定会很好用,因为如果一段时间内没有收到新数据,我需要超时连接状态(即当前 -> 陈旧)。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    相关资源
    最近更新 更多