【问题标题】:Naming text boxes in vb2010vb2010中的文本框命名
【发布时间】:2016-06-07 10:37:36
【问题描述】:

我正在 vb2010 中创建一个需要大量文本框的应用程序。将每个文本框重命名为具有唯一标识符非常耗时。例如,将 TextBox1 重命名为 txtName1 是一个漫长的过程,因为它们有很多。

有没有什么方法可以加快这个过程,以提供一个具有唯一 ID 号的用户友好名称?还是只是每一个都耕耘的问题?

【问题讨论】:

  • 你可以在visual studio中使用Find / Replace :)
  • 如果您有 Notepad++,这会容易得多。 Notepad++ 有一个正则表达式 (regex) 查找/替换工具。

标签: vb.net


【解决方案1】:

始终尝试为控件分配一个有意义的名称。如果你按照这种方法,你会发现电脑帮不上忙,所以需要手动完成。在您的情况下,它如何知道TextBox1 需要识别name

txtName1 也不是一个好的控件名称,因为 a) 它不会告诉开发人员这是谁的名字以及 b) 1 是什么?这是否意味着名称的第一部分,即名字?还是列表中第一个人的名字?正确的名称类似于 txtCustomerFirstNametxtFirstCustomerFullName(分别用于 a)b)),除非您有其他考虑,例如保持控件的名称简短尽可能匹配数据库字段名称或其他原因。

资料来源:我开发了一个企业级的保险管理应用程序,其中包含 1000 多个文本框,并且目前是任何问题的主要支持联系人。根据我的经验,控件的命名不是您花费最多的时间。

附带说明,如果您通过设计器手动重命名控件,它也会重命名代码中的所有用法。它大大减少了需要完成的工作。

【讨论】:

  • 要指定一个有意义的名称,您仍然可以在 Excel vba 中以编程方式进行;-)
  • @bonCodigo:我不认为 OP 在询问 Excel。关于您的 WinForms 答案,我认为 OP 是在询问名称的设计时更改,而不是在运行时。最终目标是简化项目导航并制作更易于维护的代码。
  • 我对运行时间表示怀疑。我发布的只是两个解决方案,可以为表单或工作表中的 x 个控件分配唯一名称......无限设计模式。加上为什么有人想在运行时更改控件名称?
【解决方案2】:

尝试:编辑,因为我现在在电脑前;)考虑上面的答案确实很好。无论如何,这里有一些事情要知道。当您在 Excel 工作表中添加文本框或任何其他控件时,它会变成Embedded 类型,如图所示。

Usually if you want to check if a Control is a Textbox we can use 17, which represents msoTextBox, the mso shape type enum for a TextBox. However those embedded Form type controls (Forms 2.0) are Shapes and do not differentiate each type with different values but common 12, the type enum which stands for msoMixedShapes. Following 2nd code works for a FORM, however it's hard to get the same settled for Excel sheet Shapes (textboxes)... Click on the link to view all the MsoShapeType Enumeration.

如果您确实希望为工作表中的形状文本框赋予有意义的名称,这里有一种方法:

Option Explicit

Sub reNameMeaningfully()
Dim shp As Shape
Dim arrNames As Variant
Dim i As Integer

    arrNames = WorksheetFunction.Transpose(Sheets(1).Range("D2:D7").Value)
    '-- assuming that you have exact number of names for the exact number of controls

    For i = LBound(arrNames) To UBound(arrNames)
        Set shp = Sheets(1).Shapes(i)
        '-- we can't check Type here. So we check if default-name begins with Text
        If shp.Name Like "Text*" Then
            shp.Name = arrNames(i)
        End If
    Next i

End Sub

输出:

如果这些 tecboxes 在 Form 中,那么试试这个:您可以使用相同的逻辑将所有名称放在一个范围内,然后遍历该范围;)

Dim Cont as Control
Dim i as integer
i = 1
 For Each Cont In Me.Controls
     If TypeName(Cont) = "TextBox" Then 
          Cont.name = "txt" & i '-- Rename 
     End If 
 Next Cont 

【讨论】:

  • @Trevor 检查一下 :) 但对于第一个代码,您需要输入正确的语法。
  • @Trevor txt1 是一个示例,并且还有更经典的方法;)如前所述,建议您也查看其他答案。无论如何,我刚刚更新了一个更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
相关资源
最近更新 更多