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

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy International News Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Troy Hunt's Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
V2EX - 技术
V2EX - 技术
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
O
OpenAI News
Cloudbric
Cloudbric
Google Online Security Blog
Google Online Security Blog
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Help Net Security
Help Net Security
Cyberwarzone
Cyberwarzone
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Spread Privacy
Spread Privacy
NISL@THU
NISL@THU
N
News and Events Feed by Topic
T
Tenable Blog
S
Security @ Cisco Blogs
N
News and Events Feed by Topic
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
P
Proofpoint News Feed
Webroot Blog
Webroot Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Jina AI
Jina AI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
L
LangChain Blog
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东

博客园 - 玄驹子

低级失误害死人 我写的第一个模板类 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,幸好现在规则还不是很多。

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

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