我的回收站
技术文章、随笔、文摘及其它
posts - 91, comments - 611, trackbacks - 1, articles - 0
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
PPC中窗体内容以及随着输入法面板的显示状态的滚动处理
Posted on 2005-04-25 18:10
被遗弃的小指
阅读(1571)
评论(3)
编辑
收藏
所属分类:
.NET技术
、
移动应用开发
这两天想做一个PPC上的小程序,才发现它上面很多东西做起来好麻烦。。。。
就拿滚动窗体里面的内容来说,在普通的WinForm下是很容易的,这里都得要自己实现。
终于在
微软的示例中找到一个例子
,不过发现窗体上如果有输入面板控件的话,如果输入法面板显示出来则会遮盖住窗体的一部分,那么就会比较麻烦。一直找不到好的解决方案,经过一番折腾,终于算是搞妥了这个问题,现将解决思路写出来,大家看看有没有什么优化的地方。
首先:窗体中所有要显示的控件都应该放到一个Panel里面,其次在窗体上放上一个VScrollBar,当然如果你也需要横向滚动条那么也放上一个吧,如下图所示:
Panel的宽度设置为224,高度根据里面的内容来具体确定。滚动条的宽度设置为16,高度为320。
private
void
Form1_Load(
object
sender, System.EventArgs e)
{
this
.vScrollBar1.Maximum
=
this
.panel1.Height
-
this
.Height;
}
也就是说,假如Panel的高度为400,那么滚动条的需要表示的最大值只需要是面板的高度减去窗体的高度就行了。
其次,增加如下代码:
private
int
preValue;
private
void
vScrollBar1_ValueChanged(
object
sender, System.EventArgs e)
{
//
只有当输入面板是打开的时候,
//
并且不是Panel中最上面的控件(这里我采用了硬编码,大家其实完全也可以通过程序遍历来实现,但是似乎没有必要费这劲)
//
而且只有用户是往下滚动窗体的时候需要处理
if
(
this
.inputPanel1.Enabled
&&
(
!
sender.Equals(
this
.textBox1))
&&
this
.vScrollBar1.Value
>=
this
.preValue)
//
面板的Top实际上设置为滚动条的值再加上输入面板的高度的和的复制,也就是把Panel往上移动就相当于滚动了
this
.panel1.Top
=-
(
this
.vScrollBar1.Value
+
this
.inputPanel1.Bounds.Height);
else
//
否则的话,只需要把Panel往上移动滚动条的值的大小就行了
this
.panel1.Top
=-
this
.vScrollBar1.Value;
//
记录当前值
this
.preValue
=
this
.vScrollBar1.Value;
}
private
void
inputPanel1_EnabledChanged(
object
sender, System.EventArgs e)
{
if
(
this
.inputPanel1.Enabled)
this
.vScrollBar1.Height
=
this
.inputPanel1.VisibleDesktop.Height;
else
this
.vScrollBar1.Height
=
this
.ClientSize.Height;
}
private
void
ShowInputPanel(
object
sender,System.EventArgs e)
{
this
.inputPanel1.Enabled
=
true
;
SetScrollBar(sender);
}
private
void
HideInputPanel(
object
sender,System.EventArgs e)
{
//
如果输入法面板上一次也是隐藏的,这次就不用动了,直接返回吧。
if
(
!
this
.inputPanel1.Enabled)
return
;
this
.inputPanel1.Enabled
=
false
;
SetScrollBar(sender);
}
private
void
SetScrollBar(
object
sender)
{
Control c
=
(Control)sender;
//
根据当前控件计算滚动条应该设置的值,然后再次触发滚动条的ValueChanged事件来调整滚动条
this
.vScrollBar1.Value
=
this
.vScrollBar1.Maximum
*
c.Top
/
this
.panel1.Height ;
this
.vScrollBar1_ValueChanged(sender,
null
);
}
最后,将所有需要显示输入法面板的控件如下处理,使其获得焦点的时候可以显示输入法面板并且调整窗体中控件位置:
this
.textBox1.GotFocus
+=
new
System.EventHandler(
this
.ShowInputPanel);
所有要隐藏输入法面板的控件再作如下处理,使其获得焦点的时候隐藏输入法面板并且调整控件位置:
this
.radioButton1.GotFocus
+=
new
System.EventHandler(
this
.HideInputPanel);
OK,经过如上处理之后,您的窗体中的控件位置首先会随着滚动条的位置的改变而滚动。
其次,当弹出或者隐藏输入法面板的时候,位置也会随之相应调整。
Feedback
#1楼
[
楼主
]
回复
引用
查看
2005-04-26 15:47 by
twodays
修改一点点:
private
void
ShowInputPanel(
object
sender,System.EventArgs e)
{
if
(
!
this
.inputPanel1.Enabled)
this
.inputPanel1.Enabled
=
true
;
SetScrollBar(sender);
}
#2楼
回复
引用
2006-08-08 00:55 by
梵 [未注册用户]
有更简单的方法.看MSDN得知PPC的inputPanel的Height总是80
那就把vScrollBar1的最大和最小设成80和0
panel1的坐标为0,0
private void inputPanel1_EnabledChanged(object sender, System.EventArgs e)
{
if (inputPanel1.Enabled == true)
{
this.vScrollBar1.Height=inputPanel1.VisibleDesktop.Height;
vScrollBar1.Visible=true;
}
else
{
vScrollBar1.Visible=false; this.panel1.Location.X=0;
this.panel1.Location.Y=0;
}
}
private void vScrollBar1_ValueChanged(object sender, System.EventArgs e)
{
this.panel1.Top=0-this.vScrollBar1.Value;
}
#3楼
回复
引用
2007-08-14 13:05 by
nsnail [未注册用户]
只考虑到了输入法面板开/关,没考虑到输入法切换时面板的高度会不一致
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2005-08-01 10:14 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索
相关文章:
电脑故障处理经验一则
电脑故障处理小经验—IE无法打开链接的处理方法
相关链接:
所属分类的其他文章:
身为开发人员的您,准备好迎接Widows Mobile 6了吗?
.NET Compact Framework 3.5 and the Orcas January CTP
写了一个Vista Gadget练练手
善用免费的Code Snippet Libraries加快你的开发速度
关于.NET中的整数除法
Windows Mobile 开发常用资源下载地址
列车时刻表 开发回顾 (二):在任务管理器中隐藏非活动窗口
列车时刻表 开发回顾 (一):后台线程更新前端界面
趁热打铁,列车时刻表 v0.8 for Pocket PC Edition 发布,同时SmartPhone版小幅度更新
列车时刻表0.8版(for SmartPhone Edition)发布,敬请各位下载试用点评。
最新IT新闻:
Facebook创始人:信息共享或存摩尔定律
微软承认Vista用户账户控制功能有问题
资本寒冬侵袭中国视频网站 营销春天或不远
金融风暴波及全球创业板 中国概念股难独善其身
携程范敏:CEO从接发传真做起
Powered by:
博客园
Copyright © 被遗弃的小指
日历
<
2005年4月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
公告
欢迎各位前往MobileSide.cn以获取移动与嵌入式最新开发技术和资讯信息!
我的MVP配置(Mobile Devices)
爱好
Windows Mobile开发
的朋友可以选择下列群加入和大家进行讨论:
1号:12440435(eVC,满员)
2号:24123368(.NET CF,满员)
3号:37371776(eVC)
4号:24780014(.NET CF)
为了节约网络资源,请不要加入多个群!!!
如果您只是Windows Mobile系统的玩家则请自行寻找其他Mobile应用相关QQ群,谢绝加入。
3号群、4号群目前诚招Q币捐赠!
This work is licensed under a
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 China License
.
与我互动
给我发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(35)
给我留言
查看私人留言
我参加的小组
北京.NET俱乐部博客园小组
我参与的团队
北京.NET俱乐部(0/1554)
Windows Mobile 应用开发(1/604)
Ajax&Atlas技术团队(0/1138)
ASP.NET AJAX (Atlas)学习(0/1352)
MVP(微软最有价值专家)团队(0/656)
Silverlight学习与研究(0/287)
Windows Vista开发(0/237)
Windows Embedded开发(0/99)
随笔分类
.NET技术(21)
Mobile业界信息(18)
Windows Mobile 团队Blog公告(19)
列车时刻表(13)
其他微软相关(6)
随便写点(8)
移动应用开发(45)
随笔档案
2008年2月 (1)
2008年1月 (1)
2007年12月 (2)
2007年11月 (4)
2007年10月 (8)
2007年9月 (1)
2007年7月 (2)
2007年5月 (3)
2007年3月 (2)
2007年2月 (2)
2007年1月 (4)
2006年12月 (1)
2006年9月 (2)
2006年8月 (1)
2006年7月 (1)
2006年6月 (3)
2006年5月 (4)
2006年4月 (5)
2006年3月 (2)
2005年12月 (1)
2005年11月 (2)
2005年10月 (3)
2005年9月 (2)
2005年8月 (3)
2005年7月 (12)
2005年6月 (6)
2005年4月 (1)
2005年2月 (4)
2004年11月 (1)
2004年7月 (3)
2004年6月 (3)
收藏夹
.NET(53)
HTML(6)
数据库(12)
移动开发(11)
杂文(2)
=_=
Xreader小说集合器
魏群
我的回收站 @ Live.com
技术天地
C# FAQ
CSDN
MSDN中文站
UMLChina
UML软件工程组织
微软中国社区精华文章
中国系统分析员
走过路过不要错过
Anders Liu的Blog
Lucky Ma的Blog
黎波的Blog
马宁的Blog
积分与排名
积分 - 124851
排名 - 319
阅读排行榜
1. Windows Mobile 开发常用资源下载地址(9069)
2. 列车时刻表查询器0.6版(SmartPhone版)发布,采用了SQLite数据引擎,欢迎下载试用。(5717)
3. 身为开发人员的您,准备好迎接Widows Mobile 6了吗?(3473)
4. 使用Windows Mobile Test Framework进行Windows Mobile程序的自动化测试 - (1)微软Windows Mobile Test Framework简介(3335)
5. “基于.NET CF的火车时刻查询器”试用邀请 兼开发手记(3040)
评论排行榜
1. Windows Mobile 应用开发团队开张咯(232)
2. 列车时刻表查询器0.6版(SmartPhone版)发布,采用了SQLite数据引擎,欢迎下载试用。(32)
3. 列车时刻表0.8版(for SmartPhone Edition)发布,敬请各位下载试用点评。(31)
4. “基于.NET CF的火车时刻查询器”试用邀请 兼开发手记(26)
5. 反驳 吕震宇的“小议数据库主键选取策略(原创)”(21)