WinForm 下实现一个自动关闭的MessageBox

HBuilderx 坑 之前没问题 改了几行代码 小程序上传报分包大小超过限制 Error: 分包大小超过限制,main package source size 4199KB exceed max limit 2MB [20221213 10:08:06][wx432abdb518bdc1eb]下面的我提示是都没超过2M,却提示我超过限制,代码改了不到20行吧,之前是正常上传的.....,比如这类,要压缩的,前提是没压缩过的,但是我肯定提交的时候是压缩的,没勾选此项的要注意,如果本文解决了你的困扰 来波666不为过吧! 阅读详情
Author: eaglet
      WinForm 下我们可以调用MessageBox.Show 来显示一个消息对话框,提示用户确认等操作。在有些应用中我们需要通过程序来自动关闭这个消息对话框而不是由用户点击确认按钮来关闭。然而.Net framework 没有为我们提供自动关闭MessageBox 的方法,要实现这个功能,我们需要使用Window API 来完成。
      首先我们需要找到这个消息对话框的窗口句柄,一个比较简单的方法就是用 FindWindow API 来查找对应的窗体句柄。

        [DllImport("user32.dll", SetLastError = true)]
        
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
复制代码

      这个API调用可以通过窗口的类名或者窗口标题的名字来查找窗口句柄。

      接下来我们还需要找到一个 API 来关闭对话框,这里我使用 EndDialog
        [DllImport("user32.dll")]
        
static extern bool EndDialog(IntPtr hDlg, out IntPtr nResult);
复制代码

      有了这两个API函数,我们就可以来关闭消息对话框了。思路是在调用MessageBox.Show 前启动一个后台工作线程,这个工作线程等待一定时间后开始查找消息对话框的窗口句柄,找到后调用EndDialog API 函数关闭这个消息对话框。不过这个方法有个问题,就是如果同时又多个同名的消息对话框(可能不一定是这个应用的),这样做可能会关错窗口,如何解决这个问题,我还没有想出比较好的方法,如果大家有更好的方法解决这个问题,不妨一起讨论讨论。
    
      我根据这个思路编写了延时关闭消息对话框的函数

        public void ShowMessageBoxTimeout(string text, string caption, 
            MessageBoxButtons buttons, 
int timeout)
        
{
            ThreadPool.QueueUserWorkItem(
new WaitCallback(CloseMessageBox), 
                
new CloseState(caption, timeout));
            MessageBox.Show(text, caption,buttons);
        }
复制代码

   这个函数中timeout 参数单位是毫秒,其他参数和MessageBox.Show的参数含义是一样的,这里不再详细说明。
   这个函数中首先利用线程池调用一个工作线程 CloseMessageBox ,并将对话框的标题和延时时间通过CloseState这个类传递给CloseMessageBox函数。
   CloseState 的定义如下:
  
        private class CloseState
        
{
            
private int _Timeout;

            
/**//// <summary>
            
/// In millisecond
            
/// </summary>

            public int Timeout
            
{
                
get
                
{
                    
return _Timeout;
                }

            }


            
private string _Caption;

            
/**//// <summary>
            
/// Caption of dialog
            
/// </summary>

            public string Caption
            
{
                
get
                
{
                    
return _Caption;
                }

            }


            
public CloseState(string caption, int timeout)
            
{
                _Timeout 
= timeout;
                _Caption 
= caption;
            }

        }
复制代码

最后就是CloseMessageBox函数了,直接看代码吧
        private void CloseMessageBox(object state)
        
{
            CloseState closeState 
= state as CloseState;

            Thread.Sleep(closeState.Timeout);
            IntPtr dlg 
= FindWindow(null, closeState.Caption);

            
if (dlg != IntPtr.Zero)
            
{
                IntPtr result;
                EndDialog(dlg, 
out result);
            }

        }
复制代码
转自:http://www.cnblogs.com/SkySoot/archive/2011/11/25/2263605.html
Pyinstaller 打包 Pyzbar 时缺失 DLL 文件的排查与修复指南 本文详细解析了使用Pyinstaller打包Pyzbar库时,因缺失关键DLL文件导致程序闪退的常见问题。文章提供了从问题复现、错误诊断到最终修复的完整解决方案,核心在于通过修改.spec配置文件,手动将缺失的libzbar-64.dll等文件添加到打包过程中,确保生成的可执行文件能独立运行。 阅读详情

相关推荐

NVIDIA DGX Spark实战指南:从开箱到AI模型高效部署

本文详细介绍了NVIDIA DGX Spark的开箱体验、硬件架构及AI模型高效部署实战指南。从1 PetaFLOP算力的迷你设备到Grace Blackwell超级芯片的深度解析,再到五分钟快速上手指南和大模型部署技巧,帮助开发者充分利用这款全球最小AI超级计算机的性能优势。

weixin_29239279的博客 1250

CakePHP 使用 Bake 代码生成器

<span style="font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">通过使用 Bake<span style="font-family:宋体;mso-ascii-font-family:"Times New Roman";mso-hansi-fo

lesorb的专栏 2279

模型预测控制(MPC)解析(三):多输入多输出系统

本文为阅读笔记,仅供学习交流使用!!! 在之前的文章中,为了简单起见,以单输入单输出系统为例介绍了MPC控制的实现方法。因为使用的是状态空间方程作为系统模型,这种方法可以轻松的扩展到多输入多输出系统中。 ...

行者无疆的博客 1万+

cakephp bake

cake php官网:http://cakephp.org/ 使用bake生成代码. 1:首先你要把数据库建好,例如我们使用PowerDesigner把数据库设计好,导出sql语句,在mysql中创建数据库tfss,创建两个简单的表(特别需要注意表名以及外键的命名,请参考cakephp的命名规范):    drop table if exists admingroups;    /

Baijinwen的专栏 1611

cake php怎么用,CakePHP入门(7)-使用cake bake命令行生成代码

CakePHP内置了命令行工具,可以帮我们生成最基本的CRUD代码,测试等。cake命令行工具们于CakePHP的核心包的cake/console目录中。进入app目录,在gnome terminal 中运行../cake/console/cake。[hantsy@localhost app]$ ../cake/console/cakeWelcome to CakePHP v1.2.0.7692 ...

weixin_39810901的博客 547

如何快速搭建一个CakePHP项目

使用Composer和Bake,只需简单的几步,便可快速生成CakePHP脚手架程序。

般若 2835

bake:为CakePHP项目快速生成代码的CLI工具

bake:为CakePHP项目快速生成代码的CLI工具 项目介绍 在现代Web开发中,重复编写基础代码是一个常见且耗时的工作。为了提高开发效率,减少重复劳动,开源社区涌现了众多代码生成工具。今天,我们要推荐的便是专为CakePHP框架设计的代码生成插件——bakebake 是一个强大的命令行界面(CLI)工具,它为开发者提供了一种快速生成CRUD(创建、读取、更新、删除)代码的方法。通过一系列...

gitblog_00992的博客 968

1.3中bake的改进

1.3Bake了重大改革,建了许多特性和增强功能。 两个新任务(FixtureTask和TestTask)从主Bake菜单访问 第三个任务(TemplateTask)添加了用于你的壳。 所有不同的烘Bake任务现在允许您使用连接默认为烘焙。使用——两性关系参数。 插件支持都得到很大的提高。您可以使用——插件PluginName或Plugin.class。 问题已经澄清,更容易理解。 多

谭明骏编程 733

CakePHP一些零碎的技巧

CakePHP一些零碎的技巧   --来自逸舟的博客 快速创建静态页面 我想实现功能: 已知:建立几个页面,它们仅包含静态数据,使用默认layout,没有任何model 要求:不用在controller里面为每个静态页面定义一个action,这种方法太笨拙了,根本不适合快速建立静态页面! 实际上只要使用pages controller就可以做到——只要在 views/pages 文...

weixin_30709061的博客 263

CakePHP中文手册【翻译】-介绍 Scaffolding

Scaffolding(脚手架) 第1节 Cake的Scaffolding非常酷 非常酷,以至于你想在产品中使用它。现在,我们认为它酷,但是请意识到scaffolding是好,但也仅是scaffolding而已。在一个项目的初期,为了开始进行,它是一捆你真正想快点丢弃的材料。这并不意味着它十分灵活。因此,如果你发现你自己真正想定制你的逻辑和视图的话,是时候将你的scaffolding收起来,...

weixin_33790053的博客 135

终极CakePHP CookBook入门:从安装到第一个博客应用的完整教程

CakePHP CookBook是一款功能强大的PHP框架,专为快速开发Web应用而设计。本教程将带你从基础安装开始,逐步构建一个功能完善的博客应用,让你轻松掌握CakePHP的核心功能和最佳实践。 ## 为什么选择CakePHPCakePHP是一个成熟的开源PHP框架,它遵循MVC(模型-视图-控制器)架构,提供了丰富的功能和工具,帮助开发者快速构建高质量的Web应用。无论是小型个人博客

gitblog_00156的博客 771

搭建Eclipse PDT开发CakePHP的环境

Eclipse 是常见的开源IDE工具,通过增加插件,可用于PHP开发。下文参考CakePHPbakery中一文:Setting up Eclipse to work with Cake,搭建一个Windows 7下面用于调试CakePHP的环境。特标注一些需留意的地方。 一、下载Eclipse PDT Eclipse可用于开发PHP的插件有不少,其中部署最方便的是PDT(PHP D

养有道 1737

CakePHP快速开发应用程序

CakePHP is a framework that provides a solid base for PHP development. It allows users at any skill level to rapidly develop robust web applications. The framework follows the principles of the MVC p...

culh2177的博客 406

cakephp视图用php文件,cakephp

开发编辑必要条件最好是带模块的,但不是必要条件.或更高版本,没错,可以在php4或是5下面运行.技术上来说,数据库不是必需的,但我们设想每个应用都会用到数据库,支持大部分数据库::3.FirebirdDB24.MicrosoftSQLServer5.Oracle6.SQLite7.ODBC8.ADOdb准备安装CakePHP运行很快并且很容易安装。最小的安装环境就需要一个服务器和一份Cakephp...

weixin_30979229的博客 238

CakePHP CookBook插件开发教程:扩展框架功能的实用方法

CakePHP CookBook是一个强大的PHP框架文档项目,通过插件开发可以轻松扩展其功能。本教程将带您了解如何创建、安装和使用CakePHP插件,让您的应用更加灵活和可扩展。 ## 什么是CakePHP插件? CakePHP插件是一种可重用的代码包,可以包含控制器、模型、视图等组件,用于扩展框架功能。插件与主应用程序分离,可在多个项目中共享和复用,是CakePHP生态系统的重要组成部分。

gitblog_00002的博客 1072

cakephp bake cli环境配置

文档里没写清楚 bake需要cli环境 其中经常会出现找不到php_mysql.dll的错误   推荐以下配置easyphp 5.2.10 php的path就用 http://cn.php.net/distributions/php-5.2.12-Win32.zip   在安装php的时候我是先安装php-5.2.12的installer版本 再用zip包把ext给复制过去的  ...

guava 171

CakePHP 为什么国内不流行

CakePHP 为什么国内不流行?感觉其3.0版本挺强的 添加评论 分享   按投票排序按时间排序 4 个回答 0赞同 反对,不会显示你的姓名 唐思,数字时代的手艺人 没用过,CakePHP 在国外也不算流行吧~~和市场宣传有关,它以前的定位就是轻型框架,现在增加哪些功能?

autumn20080101的专栏 1282

CakePHP系列(二)----Bookmarker案例(一)

一、Bookmarker教程 本教程将引导您完成一个简单的书签应用程序(Bookmarker)的创建。 首先,我们将安装CakePHP,创建我们的数据库,并使用CakePHP提供的工具快速完成我们的应用程序。 以下是您需要的: 1.数据库服务器。  我们将在本教程中使用MySQL服务器, 您将需要足够了解SQL以创建数据库:CakePHP将从那里接管

fendo 1970

【cocos2d-js官方文档】三、Bake功能使用说明

设计意图 在游戏开发的过程中,经常会遇到作为UI或者不怎么修改的背景的层(Layer), 这些层内容并不怎么变动。 而在游戏的渲染过程中,这些层往往又会消耗大量的渲染时间,特别是比较复杂的UI界面,比如:在Canvas渲染模式中,一个Button会调用9次绘图(drawImage)。在复杂一些的UI场景中,会出现UI的绘图次数远大于实际游戏的绘图次数的情况,这对于性能资源非常稀缺的手机浏览器

qinning199的专栏 3919

window 下的cake bake功能

用户变量和环境变量设成:D:/workspace/test/cake/app;D:/webserver/php;D:/workspace/test/cake/cake/console 然后在命令行中执行 D:/workspace/test/cake>cake bake  我xp的个人变量path C:/Program Files/SSH Communicat

habaishi的专栏 804

Cakephp框架 一 cake bake all -app ..\

cake bake all -app ..\ 生产框架 转载于:https://www.cnblogs.com/harry0519qing/p/4177995.html

weixin_30654583的博客 151

Delphi 12.3控件之PowerPDF for Delphi11 FullSource.zip

Delphi 12.3控件之PowerPDF for Delphi11 FullSource.zip

Matlab_Sim,滤波 matlab 源码,matlab源码网站

基于Butterworth响应的压电换能器阻抗匹配参数计算 这是一个关于滤波 matlab 源码,matlab源码网站的项目源码,可以用来学习matlaba实战项目案例。

上一篇: WinForm 应用程序中开启新的进程及控制
下一篇: 通过Ping来判断一个远程计算机是否可以到达
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值