C#GUI命名约定的最佳实践?

时间:2009-08-07 19:26:25

标签: c# winforms user-interface naming-conventions

GUI,无论是用WinForms还是XAML编写,似乎在我看到的项目之间具有最广泛不同的命名约定。对于一个人名的简单TextBox,我已经看到了各种命名约定:

TextBox tbName      // Hungarian notation
TextBox txtName     // Alternative Hungarian
TextBox NameTextBox // Not even camelCase
TextBox nameTextBox // Field after field with TextBox on the end
TextBox TextBoxName // Suggested in an answer...
TextBox textBoxName // Suggested in an answer...
TextBox uxName      // Suggested in an answer...
TextBox name        // Deceptive since you need name.Text to get the real value
TextBox textBox1    // Default name, as bad as you can get

我通常遵守所有.cs文件的StyleCop规则,并且看到其他人也这样做,但是GUI往往会破坏这些规则或者变化很大。我没有看到任何专门引用GUI元素的Microsoft指南,而不仅仅是普通变量,甚至是在控制台应用程序之外应用的示例。

在GUI中命名元素的最佳做法是什么?

17 个答案:

答案 0 :(得分:73)

我使用旧学校匈牙利语... txt用于TextBox,btn用于Button,后跟一个通用词,然后是一个更具体的词。即:

btnUserEmail

有很多人说像这样的东西这么老,VB6打电话!“但是在UI Rich winforms应用程序中,我可以更快地找到并修改内容,因为通常是你的第一件事知道一个控件是它的类型,然后是它的类别,然后得到具体的。虽然较新的风格命名惯例人员仍然试图记住他们命名的文本框。

The original specification for controls is here (archived).

答案 1 :(得分:28)

我用:

TextBox nameTextBox;

就像我会用:

MailAddress homeAddress;

原因在于,在这些情况下,“TextBox”和“Address”描述了对象所代表的内容,而不是如何存储或使用它。但在另一种情况下,如存储一个人的全名,我会使用:

string fullName;

string fullNameString;

因为“String”不描述对象所代表的内容,而只描述它的存储方式。

答案 2 :(得分:12)

与.NET中的所有其他约定相同:仅限驼峰大小写描述性名称,如果需要区分同一逻辑“事物”的不同类,则可选地后跟后缀。例如:

string name; // a name
TextBox nameText; // the control used to edit the name
Label nameLabel; // the control used to label the edit control
List<string> nameList; // a list of names
无限广告等等。只要它们是一致的和描述性的,后缀是什么并不重要。

答案 3 :(得分:9)

这不是我的发明,但我喜欢它:

TextBox uxName = new TextBox();
Label uxNameLabel = new Label();
Button uxAccept = new Button();

我更喜欢匈牙利符号,因为我的所有UI控件都显示在智能感知的一个块中。 “用户体验”的用户体验。如果您将控件从文本框更改为组合框或其他内容也很好,因为名称不会更改。

答案 4 :(得分:4)

我希望有人能够成为这个主题的权威,并且只是告诉它,并开始执行它...对我来说最糟糕的事情是当人们在同一个应用程序中混合它或者更糟糕的同类时。

我看到一些非常可怕的东西,txtName,NameTextBox,name和textBox1都在同一个表单上使用... yuck。

在我工作的地方,我们有一份标准文件告诉我们该怎么做,在哪里做,而且我认为只有20%的人甚至愿意尝试和顺从。

如果Fxcop对我大吼大叫,我通常会改变一些事情。

http://en.wikipedia.org/wiki/Naming_conventions_%28programming%29

Capitalization Styles

请注意: Microsoft .NET为大多数标识符推荐UpperCamelCase(又名“Pascal Style”)。 (建议将lowerCamelCase用于参数)。

答案 5 :(得分:3)

关于命名惯例最重要的是选择有意义的东西,从各方获得共识,并坚持使用它,就像你的生活依赖它一样。

至于使用哪种惯例,我会投票支持这个:

TextBox name

它很短并且具有语义值作为标识符。对于标识符的类型,我会依赖Visual Studio来告诉你,因为它往往擅长这种事情。

答案 6 :(得分:3)

我使用Hungation表示法略有不同。

我现在正在开发一个具有相当丰富UI的项目。因此,使用Intellisense找到一个名为“btnGetUsers”的按钮非常容易。

当应用程序能够从不同位置获取用户时,事情变得复杂。这是不同的控制。所以我开始在它们所在的位置命名我的控件并仍然使用匈牙利表示法。

作为示例:tabSchedAddSchedTxbAdress表示txbAddress是一个文本框,其中可以插入地址,并且该文本框位于“计划”选项卡控件的“添加计划”选项卡上。 通过这种方式,我可以非常轻松地找到控件,当我输入简单的“btn”时,我不会立刻得到来自整个用户界面的很多按钮。

当然这只是为了帮助自己。我不知道这样的最佳做法。然而,它有很大帮助。

Mosu'

答案 7 :(得分:2)

我将所有UI元素命名为TypeDescriptor。按照您的示例TextBoxName

答案 8 :(得分:2)

我最近一直在与MFC(6.0 ......)合作的团队工作。他们会有像

这样的东西
CString Name;
CEdit ctlName;

最简单的迁移方式是使用

之类的东西
TextBox ctlName

这足以提醒变量是控件而不是控件的值。

我认为将类型作为名称的一部分包含OLD。

- 编辑 - 另一个好处是导航时所有控件都组合在一起。如果使用了实际类型,ComboBox控件将远离TextBox控件。

答案 9 :(得分:2)

我倾向于使用c_typeName(请注意类型和名称不同),例如c_tbUserEmail用于TextBox,用户应在其中输入他/她的电子邮件。我发现它很有用,因为当有很多控件时,很难在里程长的智能列表中找到它们,所以通过添加c_前缀,我可以很容易地看到该形式的所有控件。

答案 10 :(得分:2)

这种匈牙利/ VB6命名的疯狂需要停止。

如果Microsoft真的希望您根据其类型命名控件,那么当您将控件添加到Web / win表单时,为什么Visual Studio不会自动添加'txt'或'btn'?

答案 11 :(得分:1)

我自己的做法是:输入_contextDescriptionType。 E.g:

TextBox _searchValueTextBox

无论如何,命名约定太个人化或一般规则强加。无论如何,它应该在某处记录,以便所有项目开发人员都可以轻松访问。

答案 12 :(得分:1)

我认为存在命名约定以简化开发人员编码工作并有助于管理。据我所知,应该遵循任何有助于轻松访问的名称。

我看到了不同方法的评论数量,但我在项目中找到的最好的是前缀控制的前三个名称。遵循这种方法有很多理由。

  1. Intellisense会将所有相同的类型组合在一起。
  2. 表单属性窗口也会显示所有相同的控件排序
  3. 在复杂表格上,您可以轻松识别您正在处理标签或文本框(例如lblAccounts和txtAccounts)
  4. 新用户可以轻松处理编码。
  5. 想象一下,我在同一表单上有accountLst,accountlbl,accounttxt,accountgrd,accountChk控件。
  6. 编码时,开发人员始终知道他正在访问文本框或标签。他不清楚其他开发者使用的名称。因此,只需编写“lbl”intellisens就可以选择所有标签列表,如果你使用了#5中使用的方法,那么intellisense将使用acc带来所有控件。我很少看到用控件名称以“account”开头做一些循环。这意味着在任何罕见事件中都无济于事。

    我敢打赌做一些有助于其他开发人员轻松理解代码的事情。因为当你在你的航空公司长大时,你不会总是做编码,其他人也会来你的座位。

    选择是你的,你想要的方式!

答案 13 :(得分:1)

您拥有Microsoft的Guidelines for Names。我没有遵循一切,但这是一个很好的起点

答案 14 :(得分:1)

对于我不打算在我的代码中使用的元素,我只是让设计师为我处理它;如果它们确实成为我的代码中使用的东西,它们就会变成有意义的东西,恰好是 descriptionType (nameTextBox)。如果给出足够的信息,设计师就会创建它们(查看菜单项 - “Exit”变为exitMenuItem)。

答案 15 :(得分:1)

我使用匈牙利表示法,这使得在大页面中轻松找到控件。

答案 16 :(得分:0)

如果在应用程序设计中存在良好的关注点分离,我想不需要将按钮命名为LoginButton,LoginBtn或btnLogin。如果对象的所有者是UI元素,那么我们将其称为Login,如果所有者不是UI元素,则该对象位于错误的位置。