惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
The Register - Security
The Register - Security
Stack Overflow Blog
Stack Overflow Blog
博客园 - 三生石上(FineUI控件)
T
Threat Research - Cisco Blogs
S
SegmentFault 最新的问题
V2EX - 技术
V2EX - 技术
Hacker News: Ask HN
Hacker News: Ask HN
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Proofpoint News Feed
J
Java Code Geeks
Microsoft Security Blog
Microsoft Security Blog
M
MIT News - Artificial intelligence
AI
AI
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Proofpoint News Feed
Hacker News - Newest:
Hacker News - Newest: "LLM"
B
Blog
N
News and Events Feed by Topic
N
News | PayPal Newsroom
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
WordPress大学
WordPress大学
C
Cybersecurity and Infrastructure Security Agency CISA
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 【当耐特】
U
Unit 42
腾讯CDC
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
H
Help Net Security
Recent Announcements
Recent Announcements
P
Privacy & Cybersecurity Law Blog
IT之家
IT之家
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Security Archives - TechRepublic
Security Archives - TechRepublic
L
LINUX DO - 热门话题
Martin Fowler
Martin Fowler
MongoDB | Blog
MongoDB | Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
H
Heimdal Security Blog
博客园 - 聂微东
S
Securelist
大猫的无限游戏
大猫的无限游戏
Cloudbric
Cloudbric
Cisco Talos Blog
Cisco Talos Blog

博客园 - 玄驹子

低级失误害死人 我写的第一个模板类 Dogfood ETA 要开始研究.NET了 刚看《孙悟空是一个好员工》,有一段比喻很有意思 我是十足一个大蠢驴 辞职·无奈 辞职·焦虑 辞职·麻烦 等待的滋味最不好受 几个有寓意的小故事 今天老板突然找到我 XML SOAP应用简介 终于出差回来啦 我一天的颓废生活! 软件怎样推动下一代的微处理器 如果领导都觉得自己委屈了 为什么 ClearCase & ClearQuest UCM 不适用于小公司
设计一个检查控件布局的工具
玄驹子 · 2006-01-23 · via 博客园 - 玄驹子

前几天接了个任务,是要写一个测试工具用来检查一个Form上的控件是不是正确地对齐了,说起来这个需求真的是很模糊:
1) 首先就是怎么去定义“正确地对齐了”,没有个明确的规则恐怕无从下手
2) 其次是Form上的控件排列方式千奇百怪,验证起来恐怕也会让人焦头烂额
3) 再考虑到产品代码里面有成百的Form,到时候要在这些Form上统统调试一遍,每个问题都得确定到底是产品设计的问题,还是你测试工具的问题,或者是一个规则的例外......不免有些灰心。

一开始我试图把Form上的所有可见控件枚举出来,然后针对每两个控件,判断它们应不应该对齐,应该怎样对齐。后来发现这样不怎么行得通,主要就在于“针对每两个控件,判断它们应不应该对齐,应该怎样对齐”,这些很难找到明确的答案。

比如有三个控件如下排列的时候,2和3应当不应当对齐呢?
1) 假如它们都是TextBox,一般我们是会让他们对齐的
2) 但假如它们是Label呢?3和2相比有一些缩进的例子比比皆是

再比如Label在TextBox上面的时候,左对齐和右对齐似乎都无可厚非

幸好及时和DEV以及PM沟通了一下,才发现原来他们也在做类似的工作,并且显然PM在这方面的建议更为实际,从而找到一些比较明确的关于“对齐”的定义,比如:
规则1):“当一个Label位于一个TextBox之上时,它们左边界对齐应该有3pixels的缩进,竖直方向应该有3pixels的距离”。
规则2):“一个TextBox和一个Button在一排时,应当使它们的Text Baseline对齐”
......

诸如此类。

===================================

有了具体的规则之后,一切就变得简单起来。尽管规则很多,但可以明确的是,检查对齐只用考虑相邻的控件即可。所以第一步,就是遍历一下所有的控件,然后把他们的邻接关系生成一张查询表,这样以后检查到某个控件时,便可以很方便的找到自己的左邻右舍:

在这个例子中,ListBox的左邻是label5,右舍是TextBox1, label3和TextBox2,而label5的右舍就是label1, listBox1, label4和textBox3。

下一步就是根据规则去遍历空间,比如遇到一个Label时,就要判断它是不是属于规则1(label1-4)的情况,如果是,则应用规则1。

当然这里还有个麻烦的问题,就是规则的扩展问题。最初的想法是能够将规则抽象为能够用XML表达的一些模型,然后只要写一些通用的引擎来读取这些规则就可以了。但时间仓促始终没能找到合适的解决方案,只好用了很多if...else,幸好现在规则还不是很多。

===================================

工作中经常会遇到很多类似的、目标或者手段不是很明确的任务,这种情况下搞清楚需求无论如何都应该是第一步。虽然做的是技术活,但任何技术最终都是给需求服务的。