问题描述
触摸屏程序,有很多个界面,需要每个界面中的Edit框得到焦点时显示一个虚拟键盘(虚拟键盘不能遮挡编辑框,同时虚拟键盘不能超出屏幕范围),当编辑框失去焦点时隐藏虚拟键盘;C#中如何实现?注:本人之前用C++,钩子函数可以实现上述功能:SetWindwosHookEx(WH_CALLWNDPROCRET,。。。。),只需在此函数的回调中就能处理所有控件得到和失去焦点问题,C#中有没有类似的方法实现上述功能,我不想在每个编辑框中都添加事件处理代码,这样太麻烦了。。。
解决方案
解决方案二:
用循环动态给Edit控件加事件。几行代码就搞定了
解决方案三:
所有edit都动态绑定到一个OnEnter事件中,参数sender就是获得焦点的edit
解决方案四:
请问如何在循环中给一个程序中所有的edit添加事件?
解决方案五:
两种方法:1、foreach(vareditorinthis.Controls.OfType<TextBox>()){editor.GotFocus+=(sender,args)=>{/*显示虚拟键盘*/};editor.LostFocus+=(sender,args)=>{/*隐藏虚拟键盘*/};}
2、从TextBox派生一个类,并重写OnGotFocus和OnLostFocus方法
解决方案六:
foreach(vareditorinthis.Controls.OfType<TextBox>()){editor.GotFocus+=(sender,args)=>{/*显示虚拟键盘*/};editor.LostFocus+=(sender,args)=>{/*隐藏虚拟键盘*/};}这个循环放在那里啊放在timer里不行啊
解决方案七:
放到form_load里啊窗体实例的时候绑定就行了,不要放timer里不停绑定事件啊没有打开的窗体也不需要绑定事件啊
解决方案八:
这个form_load应该是主窗体(有输入框的窗体),而不是软键盘的窗体吧?我使用的进程ProcessmyProcess=Process.start("软键盘.exe");怎么隐藏键盘????或者你有什么好方法显示和隐藏键盘吗?
解决方案九:
引用7楼u011500419的回复:
这个form_load应该是主窗体(有输入框的窗体),而不是软键盘的窗体吧?我使用的进程ProcessmyProcess=Process.start("软键盘.exe");怎么隐藏键盘????或者你有什么好方法显示和隐藏键盘吗?
你这问题和你的题目想去甚远啊。
解决方案十:
也用钩子吧,在c#中也可以调用Win32API的,只不过稍微麻烦一点。但是总比一个一个写要简单很多