当前位置: 首页 > news >正文

西丽建设网站uniapp微信小程序模板

西丽建设网站,uniapp微信小程序模板,中小企业管理软件,dede网站模板下载引言 Winform中如何引入WPF控件的教程很多,对于我们直接通过ElementHost引入的直接显示控件,它是可以响应键盘输入消息的,但对于在WFP中弹出的窗体来说,此时是无法响应我们的键盘输入的。我们需要给它使能键盘输入。 1、使能键盘…

引言

Winform中如何引入WPF控件的教程很多,对于我们直接通过ElementHost引入的直接显示控件,它是可以响应键盘输入消息的,但对于在WFP中弹出的窗体来说,此时是无法响应我们的键盘输入的。我们需要给它使能键盘输入。

1、使能键盘输入消息

简单来说就只有下面一句代码:

System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(window);

其中window是WPF窗体。

但我们在原有的WPF控件库中引入Winform的代码好像不太合适,这两个是完全不同的界面框架。

2、通用方法

通常我们的弹窗需要时单例模式,我这里采用一个静态类管理所有的单例。通过它的Add方法添加并返回WPF窗体。

    /// <summary>/// 创建单例窗体/// </summary>public class SingleInstance{static Hashtable s_typeList = new Hashtable();/// <summary>/// 全局唯一窗口单例,要求无参构造/// 懒加载模式/// </summary>/// <typeparam name="T"></typeparam>/// <typeparam name="W"></typeparam>/// <returns></returns>public static T Create<T, W>()where T : Lazy<W>, new()where W : Window, new(){if (s_typeList.ContainsKey(typeof(T))){if (s_typeList[typeof(T)] is not null)return (T)s_typeList[typeof(T)];else{T t = new T();s_typeList[typeof(T)] = t;t.Value.Closed += (s, e) => s_typeList[typeof(T)] = null;
#if NETFRAMEWORKWinformAction?.Invoke(t.Value);
#endifreturn t;}}else{T t = new T();s_typeList.Add(typeof(T), t);t.Value.Closed += (s, e) => s_typeList[typeof(T)] = null;
#if NETFRAMEWORKWinformAction?.Invoke(t.Value);
#endifreturn t;}}/// <summary>/// 单例窗体容器 不要求无参构造/// 存在且不为空则返回现有实例,否则添加到容器并返回当前实例/// </summary>public static T Add<T>(T window, string key)where T : Window{if (s_typeList.ContainsKey(key)){if (s_typeList[key] is not null)return (T)s_typeList[key];else{s_typeList[key] = window;window.Closed += (s, e) => s_typeList[key] = null;
#if NETFRAMEWORKWinformAction?.Invoke(window);
#endifreturn window;}}else{s_typeList.Add(key, window);window.Closed += (s, e) => s_typeList[key] = null;
#if NETFRAMEWORKWinformAction?.Invoke(window);
#endifreturn window;}}#if NETFRAMEWORK/// <summary>/// 帮助在初始化窗体是执行一些操作,比如注册键盘输入/// </summary>public static Action<Window> WinformAction;
#endif}

这里使用了前置处理器指示词C# 前置處理器指示詞 | Microsoft Learn

通过给WinformAction事件赋值达到自动注册目的

SingleInstance.SingleInstance.WinformAction = window =>
{                                         System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(window);
};

http://www.yayakq.cn/news/274061/

相关文章:

  • 上海建网站开发公网络营销论文
  • 男鞋 东莞网站建设做网站诈钱
  • wordpress 隐私设置2018网站如何做seo
  • 建设银行甘肃省行网站月嫂云商城网站建设
  • 儿童才艺网站建设模板注册了域名之后怎么做网站
  • 更改网站文章上传时间北京专业建设
  • 做worksheet的网站oppo软件商店官网
  • 游戏网站建设策划书怀化网站设计
  • 做网站能赚钱吗知乎手机网站app开发
  • 哪一些网站使用vue做的设计素材网站有哪些免费
  • 慈溪哪点有学做网站的怎么做网站内部链接的优化
  • 济南大型网站建设c语言精品课程网站开发
  • 专业手机网站建设开发工具是什么
  • 专业单位网站开发wordpress博客置顶
  • 同一人可以做几个网站的负责人淘宝联盟个人网站怎么做
  • 天堂网站公司名字变了网站备案
  • 如何申请网站优化工作做物流网站费用多少
  • 全景网站制作教程seo视频教程百度云
  • 杭州手机建站模板南京网站设南京网站设计计
  • 泰兴网站建设吧软文营销写作技巧
  • 亚马逊海外网站山东房和城乡建设厅网站首页
  • 站长之家最新网站山西网站建设怎么样
  • 移动门户网站建设特点数字营销是干啥的
  • 如何做像淘宝一样的网站京东电子商务网站建设目的
  • 福州最好的网站建设公司产品设计在线
  • 中国建设人才服务信息网是正规网站如何做视频门户网站
  • 手袋东莞网站建设做摄影网站的目的
  • 免费的毕业设计网站建设南昌seo推广
  • 凡客诚品市场份额济南网络优化厂家
  • 怎么修改网站的域名自己电脑做网站服务器违法吗