控件命名规范

41

微软在其网站上提供了命名指导方针(这里)。此外,我还有《框架设计指南》这本书。

但是我找不到有关命名控件的指导方针。

例如,当将一个按钮拖到表单中时,默认名称为类型名称+数字,驼峰式命名,如"button1"。

这是我所做的:删除数字,并添加有意义的描述。例如"buttonDelete"或"buttonSave"。

这样一来,您就不必在某个指南中维护一个大型控件列表及其缩写名称。

您同意吗?


4
你应该将名称编辑为“WinForms控件命名约定IMHO”。 - Krzysztof Kozmic
参见:https://dev59.com/SXRC5IYBdhLWcg3wAcQ3 - Jon B
我同意(稍作修改)。 - el2iot2
https://dev59.com/53M_5IYBdhLWcg3wvV5w - SMUsamaShah
阅读此内容于2017年... 狠狠地踩C语言粉丝的赞。 - Sinatr
Visual Studio(集成开发环境,目前版本为2019)将在您将控件拖放到表单上时为您提供命名的好主意。对于VB来说,它应该是PascalCasing,以大写字母开头,并以控件名称开头,例如Button1。 - Lenard Bartha
12个回答

30

这里列举了一些常见的:

frm  Form
mnu  Form menu
cmd  Command button
chk  Check button
opt  Radio button
lbl  Text label
txt  Text edit box
pb   Picture box
pic  Picture
lst  List box
cbo  Combo box
tmr  Timer

更详细的列表请参见INFO: VB中对象匈牙利命名约定


https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/general-naming-conventions?redirectedfrom=MSDN 上说:“不要使用匈牙利命名法。” - Sinan ILYAS

28

注意:以下内容更适用于WinForm/WPF开发。Patrick Peters正确指出,处理ASP.NET控件时存在带宽/性能问题。

在这里没有真正的标准,我认为这是因为它是最任意命名方案之一。在大多数情况下,控件是私有的,在事件处理程序中轻微使用。

像其他回答者一样,我也曾经花费相当多的时间来“修复”控件名称。我会使用“btnSave”、“tbxName”(tbx代表TextBox)等方式。然而,当我向其他人解释我的方案时,我意识到这是多么任意。 "cbx"是ComboBox还是Checkbox?

这促使我重新审视设计师自动完成的工作,并意识到如果我让设计师完成这项工作,我可以清晰、一致且快速地命名控件。这与提问者的建议非常相似:

我用控件的语义替换控件编号。因此,“button1”(设计师默认值)将成为“buttonSave”,而“listBox3”将变成“listBoxWidgets”。如果只有一个该类型的控件,我只需要删除数字:“errorProvider1”变成“errorProvider”。

那么这种做法有什么好处呢?

  • 如果它是一个内部变量,那么小心翼翼地“修复”变量名是浪费时间
  • 如果缩短了一堆东西,你的命名方案很可能会引起歧义(CheckBox与ComboBox)。
  • 设计师提供了一个良好、一致的起点,易于(且快速地)专门化。
  • 当使用Intellisense时,变量名的长度无关紧要
  • 控件名称在前面加上它们的类型时,在Intellisense中可以直观、方便地分组。当您的窗体上有15个TextBox时,您只需首先记住您想要一个TextBox,然后从列表中选择名称即可。
  • 任何不熟悉您的“方案”的人都可以立即看到它并比其他任何东西更快地采用它。
  • 提供有用的控件名称非常快...几乎不需要键盘/鼠标操作就可以完成...因此高效率带来直观结果。有什么不好的呢?
  • PS:这有点像一道涂装车棚的问题,但由于我能画车棚,所以我参加了讨论。 ;)


    2
    当你考虑ASP.NET的性能时,变量的长度是相关的。变量名可能是HTML下游的一部分。 - Patrick Peters
    1
    @Patrick Peters - 很好的观点。从样本中,我感觉这主要是WinForms控件的讨论,其中名称长度对影响很小。然而,我同意,在更大的包括ASP.NET的讨论中会有所不同。我将更新并明确说明这个假设。 - el2iot2

    22

    虽然我没有一个具体的规则,但我尽量在名称的“类型”部分上做到非常宽泛。例如,Button(按钮),Link Button(链接按钮),Image Button(图像按钮)通常都被命名为“somethingButton”。组合框,单选按钮列表都以“somethingSelector”结尾。TextBoxes和Calendars叫做“somethingInput”。这样,我可以大致了解控件的类型,而不将名称与实际实现绑定在一起。如果我决定用下拉列表替换选项按钮组,则无需重新命名!


    1
    这是一个非常好的想法。最重要的是,名称反映了控件的用途。+1 - Mark Pim
    这正是我的观点,你只是表达得更好。+1 - Krzysztof Kozmic
    我喜欢“实现独立”的命名理念,但在实践中,我发现重构控件名称几乎是瞬间完成的。因此,在创建时花费时间“修复”名称与稍后可能进行重构之间存在权衡。在IDE中,后者非常快速。 - el2iot2
    @ee - 我同意在VS中重命名是很容易的,但是当时间紧迫时,很可能会被忘记,很快 'LinkButton' 控件就会指向 'ImageButton' 等等... - Jon M
    @JonM 那么你会怎样称呼复选框控件?somethingSelector? - Prokurors
    1
    @Prokurors 我可能会选择“somethingToggle”,但“somethingCheckbox”也可以 - 这取决于将来是否有另一个类似切换的控件。人们可以想象用单选按钮列表替换组合框,因此在那里使用“Selector”来捕捉意图而不是具体细节。 - Jon M

    4

    我已经有一段时间没有做WinForms了,但我做了两件事。

    • 取消“生成成员”(或类似名称)的选择,例如标签等。基本上保证只保留我需要的字段。
    • 对于我需要的那些字段,设置描述性名称。如果必要,添加控件的名称(例如saveButton)。如果我觉得添加控件名称不会增加任何价值,我就不会添加“Button”,只会将名称保留为“save”。

    基本上大部分时间我根本不会为保存按钮创建一个成员。(如果您有一些保存逻辑,仍然可以只订阅OnSaving事件处理程序到按钮的Click事件)。

    https://msdn.microsoft.com/en-us/library/ms233630(v=vs.110).aspx


    3
    对于“取消勾选生成成员”的方法,给予+1的支持。 - el2iot2

    3

    是的,更改这些名称

    对于我来说:

    • 按钮 btnDescription

    • 文本框 txtDescription

    • 组合框 cboDescription

    等等...


    1
    +1 因为我也使用它。然而,我真的希望有人告诉我这已经过时了,有更好的方法。匈牙利命名法实在太讨厌了。 - Jon B
    8
    我讨厌这种风格。这是匈牙利命名法中最糟糕的形式,看起来非常刺眼。如果我的团队中有开发人员想要使用这种方式,我会在他们的眼睛里插上一支铅笔。 - Krzysztof Kozmic
    你如何在一个由100名开发人员组成的团队中执行这个规定呢?嗯...你必须将其写入指南中。然后...你必须为每个新的控件(工具包)开发者使用进行维护... - Patrick Peters
    1
    +1. 我只在这里使用它。当你在处理代码时,你想要一个按钮,但你不知道所有按钮的名称,你可以说你想要右上角的那个,无论它叫什么。这个+智能感应功能使发现它的名称变得容易。 - Quibblesome
    2
    +1 我同意Quarrelsome的观点;只需使用这种控件符号,就可以更快地找到所需的内容。此外,我从事Web应用程序开发,因此需要关注的控件要少得多。 - Nick
    显示剩余4条评论

    2

    在各种规范方面,GUI编程总是受限制的。请查阅我 回答另一个问题 中的指南,以获取我的命名建议。


    1

    是的,对于任何变量(控制变量或非控制变量),您都需要有意义的标识符 - 默认名称只是因为您的IDE不知道您的问题域,因此无法始终“猜测”更好的名称。


    1

    我可能是最后几个仍在使用匈牙利标记的人之一。我知道IDE可以告诉您变量类型的参数,但是当我在Notepad ++中编码或查看打印输出时,这对我没有帮助...无论如何,我使用"btnSave","cbOptions","txtFirstName","lblTitle","ddlCardType"等。我喜欢能够瞥一眼代码并知道自己在看什么,而不必寻找声明或将鼠标悬停在变量上以获取其数据类型。


    0

    是的,我完全同意(但我将其重命名为ButtonDelete),所以在我的情况下小写名称用于变量 :)

    个人认为,只要你保持一致,即使有人阅读你的代码,也不会遇到问题。


    我不会将其重命名为ButtonDelete,因为您在表单上放置的每个控件都将成为Form类的私有实例成员。私有实例字段默认采用骆驼命名法。 - Patrick Peters
    好的 - 就像我说的,只要你在定义上保持一致并且不过分离谱,我认为你就没问题 :) - Gambrinus

    0

    我不确定,但我认为在Windows Forms中的控件命名是我唯一能看到使用匈牙利命名法的地方之一。所以我认为你做得很好。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接