Windows 窗体中的淡入淡出效果

2024-04-10

我正在尝试使用 Windows 窗体向按钮、图片框和文本框添加一些淡入淡出效果。

我知道我应该为此使用 WPF,但我从未使用过它,这对我来说太复杂了,我的项目现在要高级以切换平台。

我有这个,但不透明/褪色效果一点也不平滑。

public void Animation(Button button1) {
    var expandTimer = new System.Windows.Forms.Timer();
    var contractTimer = new System.Windows.Forms.Timer();
    expandTimer.Interval = 10;
    contractTimer.Interval = 10;
    DateTime animationStarted = DateTime.Now;
    TimeSpan animationDuration = TimeSpan.FromMilliseconds(250);
    int initialWidth = 75;
    int endWidth = 130;

    button1.MouseHover += (_, args) => {
        contractTimer.Stop();
        expandTimer.Start();
        animationStarted = DateTime.Now;
        button1.ForeColor = Color.DimGray;
    };

    button1.MouseLeave += (_, args) => {
        expandTimer.Stop();
        contractTimer.Start();
        animationStarted = DateTime.Now;
        button1.ForeColor = Color.Red;
    };

    expandTimer.Tick += (_, args) => {
        double percentComplete = (DateTime.Now - animationStarted).Ticks
                / (double)animationDuration.Ticks;
        button1.Visible = false;

        if (percentComplete >= 1) {
            expandTimer.Stop();

        } else {
            button1.Width = (int)(initialWidth +
                    (endWidth - initialWidth) * percentComplete);

        }
    };

    contractTimer.Tick += (_, args) => {
        double percentComplete = (DateTime.Now - animationStarted).Ticks
                / (double)animationDuration.Ticks;
        button1.Visible = true;

        if (percentComplete >= 1) {
            contractTimer.Stop();

        } else {
            button1.Width = (int)(endWidth -
                    (endWidth - initialWidth) * percentComplete);
        }
    };
}

如何在不切换到 WPF 的情况下修复不那么平滑的过渡?


首先我要说的是,你可能不再关心得到答案,因为这个问题已经快一年了。我觉得有必要发布这个答案,因为我认为它确实有助于回答OP的问题,不是通过提供解决方案,而是通过提供如何获得解决方案的路线图......我认为这是最好的学习方式。

让我们开始...

转换不稳定是因为当鼠标悬停在控件上时,“MouseHover”的事件处理程序会连续触发。这会导致您的动画被中断并使其显得不稳定。

我在这里的建议是,使用“MouseEnter”事件来启动计时器。

进一步研究一下,您可能会发现两个计时器之间的相似之处,并通过创建自己的计时器来使用单个计时器来完成这两项任务,该计时器具有可以由这两个事件触发的方法,以使按钮增大或缩小。

另外,尽管人们建议使用 WPF(我并不反对,WPF 很有用),但不要对 System.Windows.Forms 失去信心。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 窗体中的淡入淡出效果 的相关文章

  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob

随机推荐

  • 为每个因子组添加单独的 vlines 到 ggplot(变量重要性随机森林的点图)

    我正在使用 ggplot2 制作随机森林中六个相关变量重要性结果的点图 我的数据 我已经使用 reshape2 将其转换为长格式 如下所示 我的真实数据集有点大 Factor Group Value Gender A 0 000127 Ag
  • 如何在 emacs elisp 中查找哪个文件提供该功能

    目前我正在使用加载历史记录变量来查找某个功能来自的文件 假设找到该文件的特征gnus来自 我在暂存缓冲区中执行以下代码 该代码在单独的行中连续打印文件名和符号 dolist var load history princ format s n
  • 正则表达式和 GWT

    我的问题是 在GWT中使用正则表达式有没有好的解决方案 例如 我对 String split regex 的使用不满意 GWT 将代码翻译为 JS 然后将正则表达式用作 JS 正则表达式 但我无法使用 Java Matcher 或 Java
  • 使应用程序在越狱设备上自行重启

    我的 iOS 应用程序是否可以在每次用户访问其主屏幕时自动重新启动 这是针对越狱设备的 该应用程序不适用于应用程序商店 一般来说 鉴于应用程序外部的特定用户操作 如何让我的应用程序重新启动 加速度计 如果您只想让您的应用程序在遇到某些加速计
  • 使用其名称来响应渲染组件

    我正在试验 React js 它运行得非常好 我想知道是否可以将类注入到其他类中 如下所示 var Container React createClass render function lt this props implComponen
  • Windows 中的 Perl Kill(0, $pid) 总是返回 1

    我正在尝试制作一个 Perl 脚本来运行 Windows 中的一组其他程序 我需要能够捕获进程的 stdout stderr 和退出代码 并且需要能够查看进程是否超出了分配的执行时间 现在 我的代码的相关部分如下所示 pid open3 w
  • 如何在 Rails 中实现计数器缓存?

    我有一个帖子控制器和一个评论控制器 帖子有很多评论 评论属于帖子 关联是在 counter cache 选项打开的情况下设置的 如下所示 Inside post rb has many comments Inside comment rb
  • 自定义指令中的 ng-class 不观察更新

    我正在尝试创建一个像这样使用的指令
  • OpenCV 模板匹配 N 个最佳匹配不起作用

    我已经为此苦苦挣扎了很长一段时间 但似乎找不到这里的问题 让我尝试引导您完成整个过程 我正在尝试为我的模板匹配获取 10 个最佳边界框 不会在这里显示整个图像 但这是我的cv mat当我循环遍历cv mat搜索最低值 结果 int a b
  • ggplot2:如何调整图例中的线型+顺序?

    我想调整以下 ggplot 中的线型 因此 我在 data frame df 中引入另一列来表示线型 但是一旦我将其转换为因子 线型而不是 方法 就会出现在图例中 参见试验 3 如何获得传说中的 方法 最后我希望能够 自由选择线型 自由选择
  • 为什么反射可以访问C#中类的受保护/私有成员?

    为什么反射可以访问C 中类的受保护 私有成员 这对课堂来说不安全吗 为什么反思会被赋予如此大的力量 这是一个反模式 http en wikipedia org wiki Anti pattern 会员可访问性不是安全功能 它的存在是为了保护
  • 仅在 iOS 和 Android 中处理数据通知失败

    我有一个发送推送通知的服务器 对于Android 我覆盖onMessageReceived来处理消息 对于 iOS 我使用NotificationExtension I need更改传入的推送通知 我不知道标题和服务器端的所有内容 客户端知
  • HttpClient HttpResponseMessage 地址/URI

    我正在开发一个 C WinRT 应用程序 该应用程序向网络服务器发出 POST 和 GET 请求 有谁知道使用 HttpClient 对象时是否有办法获取响应 URI 地址 如果我使用 HttpWebRequest HttpWebRespo
  • 使用jq连接多个文件中的JSON数组

    我有一系列包含记录数组的 JSON 文件 例如 cat f1 json records a 1 a 3 cat f2 json records a 2 我想 1 从每个记录中提取一个字段 2 输出一个包含所有输入文件中所有字段值的数组 第一
  • C:创建静态库并使用 Makefile 进行链接

    我在尝试着了解静态和共享库 http randu org tutorials c libraries php 我想执行以下操作来创建一个单独编译和链接的 makefile 以便创建和链接静态库 形成最终的静态可执行文件 我有以下 Makef
  • 在java应用程序中使用“bcc”发送电子邮件而不使用“to”

    我已经阅读了 stackoverflow 中的所有参考资料 然而 没有任何东西符合我们的目标 我该如何使用bccjava中的sendmail方法 根据 SMTP 的 RFC RFC 2821 link http www ietf org r
  • mySQL SELECT 即将到来的生日

    我正在尝试编写一个查询来选择数据库中生日在未来 7 天内的用户 我做了很多研究 但无法想出可行的解决方案 生日字段存储为 varchar 例如 04 16 93 有什么办法可以处理这个吗 这是我到目前为止所拥有的 SELECT FROM P
  • 为什么一个简单的 React 组件会渲染两次?

    我刚刚启动了一个新的 create react app 项目 并注意到 React 渲染组件两次 我的反应版本在包 json is react 16 13 1 import React useRef from react const App
  • Tomcat 未从 eclipse 启动

    我试图从 eclipse 启动 tomcat 服务器 6 0 32 不是我的应用程序 但它失败并出现错误 Server Apache Tomcat v6 0 32 at localhost failed to start 但是当我用star
  • Windows 窗体中的淡入淡出效果

    我正在尝试使用 Windows 窗体向按钮 图片框和文本框添加一些淡入淡出效果 我知道我应该为此使用 WPF 但我从未使用过它 这对我来说太复杂了 我的项目现在要高级以切换平台 我有这个 但不透明 褪色效果一点也不平滑 public voi