首页 > 编程语言 >C# 输入法切换 C#中FormClosing与FormClosed的区别详细解析

C# 输入法切换 C#中FormClosing与FormClosed的区别详细解析

时间:2022-10-22 16:44:06浏览次数:64  
标签:IntPtr 输入法 C# WinAPI static FormClosing public

引用

/// <summary>
        /// 输入法切ENG
        /// </summary>
        public void ChangeENG() 
        {
            WinAPI.PostMessage(WinAPI.HWND_BROADCAST, WinAPI.WM_INPUTLANGCHANGEREQUEST, IntPtr.Zero, WinAPI.LoadKeyboardLayout(WinAPI.en_US, WinAPI.KLF_ACTIVATE));//输入法切换为ENGLISH,扫码枪需要
        }

        /// <summary>
        /// 输入法切Chinese
        /// </summary>
        public void ChangeChinese()
        {
            WinAPI.PostMessage(WinAPI.HWND_BROADCAST, WinAPI.WM_INPUTLANGCHANGEREQUEST, IntPtr.Zero, WinAPI.LoadKeyboardLayout(WinAPI.cn_ZH, WinAPI.KLF_ACTIVATE));//输入法切换为Chinese
        }

 

类:

/// <summary>
        /// 输入法切换
        /// </summary>
        public class WinAPI
        {
            [DllImport("user32.dll")]
            public static extern bool PostMessage(int hhwnd, uint msg, IntPtr wparam, IntPtr lparam);

            [DllImport("user32.dll")]
            public static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint Flags);

            public static uint WM_INPUTLANGCHANGEREQUEST = 0x0050;
            public static int HWND_BROADCAST = 0xffff;
            public static string en_US = "00000409"; //英文
            public static string cn_ZH = "00000804";
            public static uint KLF_ACTIVATE = 1;
        }

C#中FormClosing与FormClosed的区别详细解析

C#中,当窗口关闭时,它会引发两个事件:Closing 和 Closed。

Closing 在窗口关闭之前引发,它提供一种机制,可以通过这种机制来阻止窗口关闭。 系统会向Closing 事件处理程序传递一个 FormClosingEventArgs e,该参数实现 Boolean Cancel 属性,将该属性设置为 true 可以阻止窗口关闭。

DialogResult result = MessageBox.Show("你确定要关闭吗!", "提示信息", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            if (result == DialogResult.OK)
            {
                CloseDevice();
                ClosePLC();
                GC.Collect();
                //this.Close();
                this.Dispose();

                e.Cancel = false;
                
            }
            else
            {
                e.Cancel = true;
            }

 

 

在窗口真正关闭之前,会引发 Closed,这时无法阻止窗口关闭。

private void Form1_FormClosed(object sender, FormClosingEventArgs e)
        {
            Application.Exit();
        }

 

标签:IntPtr,输入法,C#,WinAPI,static,FormClosing,public
From: https://www.cnblogs.com/duStar96/p/16816400.html

相关文章

  • PipeCAD-1.0.25 发布啦!
    PipeCAD-1.0.25发布啦![email protected],三维管道设计软件,三维工厂设计软件,三维配管软件PipeCAD1.0.25版本发布啦!主要增加管道模型修改版本记录REVI;......
  • 选择排序与冒泡排序(c语言+Java语言)
    选择排序O(n2)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素......
  • fullsdk和public-SDK区别
    今天在使用远程启动FA的时候,要用到fullsdkpublic-SDK是提供给应用开发的工具包,跟随DevEcoStudio下载,不包含系统应用所需要的高权限APIfull-SDK是提供给OEM厂商开发应用的工......
  • copyOfRange方法--源码分析
    首先看看Arrays.copyOfRange泛型方法:publicstatic<T>T[]copyOfRange(T[]original,intfrom,intto){returncopyOfRange(original,from,to,(Class<?ext......
  • #yyds干货盘点# LeetCode 腾讯精选练习 50 题:整数反转
    题目:给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围 [−231, 231 −1],就返回0。假设环境不允许存......
  • 代码复现:Copy-Paste 数据增强for语义分割
    一、前言前些天分享了一篇谷歌的数据增强论文,解读在这:https://www.cnblogs.com/tangjielin/p/16812816.html。可能由于方法比较简单,官方没有开源代码,于是,我自己尝试在语......
  • [RxJS] Extract common operator logic into standalone function
    /**From*/click$.pipe(mergeMapTo(throwError({status:400,message:'Servererror'}).pipe(retryWhen(attempts=>{returnatt......
  • java第四讲-继承与多态-InheritsAndPolymorphismSourceCode
    1.继承条件下类的访问权限public:外界可自由访问;private:外界不可访问;protected:同一包中的子类都可以访问,另一包中的子类(派生于同一个父类)也可以访问;default:如果......
  • UEC++ 多线程(二) AsyncTask
    AsyncTaskAsyncTask系统实现的多线程与自己实现继承的FRunnable实现的原理相似,还可以利用UE4提供的线程池。当使用多线程不满意时也可以调用StartSynchronousTask改成主线......
  • UniTask使用笔记,将Action回调改写成await,以PlayableDirector的Stopped为例
    UniTask提供了很多异步方法,如Resources.LoadAsync,UniTask.NextFrame,UniTask.WaitUntil,按钮事件button.OnClickAsync等当没有内置方法时,我们希望能将自己的回调方法改写为a......