2013-01-19 78 views
0

我在vb2010中創建了一個需要大量文本框的應用程序。將每個文本框重命名爲具有唯一標識符是非常耗時的。例如,將TextBox1重命名爲txtName1是一個漫長的過程,當它們有很多時。在vb2010中命名文本框

有沒有什麼方法可以加快速度,給用戶提供一個唯一的ID號碼?或者它只是一個犁過每個問題的問題?

+1

您可以在視覺工作室中使用** Find **/**替換** :) – Saju

+1

如果您有** Notepad ++ **,這將會容易得多。記事本++有一個正則表達式(正則表達式)查找/替換功能。 – Saju

回答

2

試試看:現在我正在編輯個人電腦的前臺;)考慮上面的回答說的確很好。無論如何,這裏有一些事情要知道。當您在Excel工作表中添加文本框或任何其他控件時,它將變爲圖像所示的Embedded類型。

enter image description here

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 

輸出:

enter image description here

如果這些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 
+0

@Trevor檢查了這一點:)但第一個代碼,你需要把正確的語法。 – bonCodigo

+0

@Trevor'txt1'是一個示例,也有更經典的方法來做到這一點;)如上所述,建議您也看看其他答案。無論如何,我只是更新一個更好的解決方案。 – bonCodigo

3

總是試圖分配一個有意義的名字到控制。如果你遵循這種方法,你會發現計算機無法幫助,所以需要手動完成。在你的情況,它是如何知道TextBox1需要識別name

txtName1不是控制任何一個好名字,因爲一)它不告訴)開發商的名字是和b什麼1?這是否意味着名字的第一部分,即名字?或列表中第一個人的姓名?除非您有其他考慮因素,例如保持控件名稱儘可能短,匹配數據庫字段名稱或其他原因,否則適當的名稱將類似txtCustomerFirstNametxtFirstCustomerFullName(對於a)b))。

來源:我開發了一個超過1000個文本框的保險管理企業級應用程序,目前是它的主要支持聯繫人。根據我的經驗,控制的命名是而不是你大部分時間都花在這裏。作爲一個方面說明,如果你通過設計器手動重命名一個控件,它也會重命名代碼中的所有用法。它大大減少了需要完成的工作。

+0

要分配一個有意義的名稱,您仍然可以在Excel vba中以編程方式執行此操作;-) – bonCodigo

+0

@bonCodigo:我不認爲OP在詢問Excel。關於你的WinForms答案,我認爲OP在詢問關於Name的設計時改變,而不是在運行時。最終目標是簡化項目導航並製作更多可維護的代碼。 – Neolisk

+0

懷疑我提到過運行時間。我發佈的只是兩個解決方案,可以爲x個控件分配唯一名稱,無論是在表單還是工作表中......無限期地設計mode.plus爲什麼有人想在運行時更改控件名稱? – bonCodigo

相關問題