2017-07-16 81 views
-1

您好,請原諒我對我很不好英語首先是...Vb.net呼叫Class1.enum

我不習慣與結構或枚舉的工作...

我有很多在我的項目班,我試圖組織。

我的類Duree將包含多個枚舉或結構。

我想能夠調用不同的枚舉或結構。

並在關聯的結構上構建請求。

RepairList.vb

Public Class RepairList 

    Dim Tool As New Tools 
    Dim uuu As String = Tool.Find("C:\Data\1\" & Form1.TextBox2.Text & ".txt", "ProductType") 
    ' Now uuu contains iPhone7,2 
    uuu = uuu.Replace(",", "") 
    uuu = uuu.Replace("i", "I") 
    uuu = uuu.Replace(" ", "") 
    uuu = uuu.Replace("P", "p") 
    ' Now uuu contain Iphone72 
    Dim p As Devices.Device ' Class Devices --> Structure --> Device 
    Dim info As Reflection.FieldInfo = p.GetType().GetField(uuu) 
    Dim az As Object = info.GetValue(p) 
    ' Now az contains Iphone 6 
    Dim toto As Object 
    toto = az 
    toto = toto.Replace(" ", "") 
    ' Now toto contain Iphone6 the Name of the enum i woul catch in Duree 
    Dim test As String = myCheckbox.Name ' now test contains AntenneWifi 
    Dim value As Integer 
    value = CInt([Enum].Parse(GetType(Duree.Iphone6), test)) 

End Class 

Devices.vb

Public Class Devices 

Public Structure Device 

    Const Iphone41 = "Iphone 4S" 
    Const Iphone51 = "Iphone 5" 
    Const Iphone52 = "Iphone 5" 
    Const Iphone53 = "Iphone 5C" 
    Const Iphone54 = "Iphone 5C" 
    Const Iphone61 = "Ihpone 5S" 
    Const Iphone62 = "Iphone 5S" 
    Const Iphone71 = "Iphone 6 Plus" 
    Const Iphone72 = "Iphone 6" 
    Const Iphone81 = "Iphone 6S" 
    Const Iphone82 = "Iphone 6S Plus" 
    Const Iphone84 = "Iphone SE" 
    Const Iphone91 = "Iphone 7" 
    Const Iphone92 = "Iphone 7 Plus" 
    Const Iphone93 = "Iphone 7" 
    Const Iphone94 = "Iphone 7 Plus" 
End Structure 

End Class 

Duree.vb

Public Class Duree 

Public Enum Iphone5 
    'Define the Repair Time For each action. 
    AntenneWifi = 35 
    Batterie = 15 
    BtnVolDown = 45 
    BtnVolUp = 45 
    BtnHome = 20 
    BtnPower = 35 
    CableWifiBth = 35 
    CamAr = 30 
    MotherBoard = 30 
    FullScreen = 20 
    ScreenOnly = 40 
    HPExt = 35 
    HPInt = 25 
    SimLevier = 35 
    NappeHomeLong = 30 
    NappeBtnPower = 45 
    NappeFacetime = 30 
    NappeVolVibr = 40 
    PlaqueProtectLCD = 30 
    PriseJack = 40 
    SimTray = 2 
    Vibreur = 25 
End Enum 

Public Enum Iphone6 
    'Define the Repair Time For each action. 
    AntenneWifi = 35 
    Batterie = 15 
    BtnVolDown = 45 
    BtnVolUp = 45 
    BtnHome = 20 
    BtnPower = 35 
    CableWifiBth = 35 
    CamAr = 30 
    MotherBoard = 30 
    FullScreen = 20 
    ScreenOnly = 40 
    HPExt = 35 
    HPInt = 25 
    SimLevier = 35 
    NappeHomeLong = 30 
    NappeBtnPower = 45 
    NappeFacetime = 30 
    NappeVolVibr = 40 
    PlaqueProtectLCD = 30 
    PriseJack = 40 
    SimTray = 2 
    Vibreur = 25 
End Enum 
End Class 

我把這裏只有2枚舉,但我有更多的Duree

所以在RepairList.vb我將在下面一行

value = CInt([Enum].Parse(GetType(Durée.Iphone6), test)) 

更換Duree.Iphone6通過類似

value = CInt([Enum].Parse[GetType("Duree+" & toto), test)) 

但我不能找到正確的語法。

這裏是什麼,我已經看過之前

Enum's and interfaces

Search for a string in Enum and return the Enum

和許多其他..

感謝的很多,如果你能幫助我的概述

+0

我真的不明白你在這裏試試。你從一個變量中獲得一個字符串作爲枚舉的名字,然後你嘗試設置與一個枚舉值關聯的整數或者你想要做什麼? –

+0

對不起,我不得不編輯主要帖子,以更準確。 – moi

+0

我想他打算通過字符串找到一個枚舉。順便說一句,你爲什麼想要它?如果您的程序需要選擇,Enum是防止錯誤輸入的最佳方法... – Karuntos

回答

0

所以,雖然我相信,你正在做的是不是最好的方法,任何你正在嘗試做的,這裏,你得到你所期待的:

Dim a As Assembly = GetType(Duree).Assembly 
Dim t As Type = a.GetType("YOUR_PROJECT_NAME.Duree+" & toto) 

如果Duree是部分命名空間的字符串變成"YOUR_PROJECT_NAME.NAMESPACE.Duree+" & toto

現在t包含被稱爲toto字符串文本的枚舉類型(如果有的話,如果不存在,將會是Nothing)。

也許有更好的方法來實現這一點,但我不知道它,因爲我從來不需要它。 也許如果你更好地解釋你想要做的事情,我們可以幫助設計,所以你不需要這樣做,因爲它沒有多大意義,而且這不是用枚舉工作的方式。

PD:請勿使用特殊字符作爲名稱。寫Duree而不是Durée。

+0

感謝花時間回答。但目前「t」只是一時的epmty。 – moi

0

而不是試圖通過枚舉和常量在類型系統中編碼此信息,我認爲你會發現它更好的工作,如果你把它放在數據庫表中,你可以在應用程序啓動時加載,可能到Dictionary對象。一旦你這樣做了,你可以簡化醜陋的反射代碼到簡單的查找中,並且在發佈新的電話設備時讓自己更容易。