Kolekce Resources   zodpovězená otázka

VB.NET

Zdravím,

měl bych jeden dotaz. Je možné nějakým způsobem pracovat s Resources v projektu jako s kolekcí, u které se na jednotlivé položky mohu odkazovat přes její index (nebo vlastnost Item)?

Děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pomocí System.Resources.ResourceManager.GetResourceSet získáte kolekci resources pro danou kulturu.

Dim resources = My.Resources.ResourceManager.GetResourceSet(My.Application.UICulture, True, True)
For Each resource In resources
  '...
Next

nahlásit spamnahlásit spam 4 / 4 odpovědětodpovědět

Mnohokrát Vám děkuji.

To je přesně ono.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den

chtěl jsem se zeptat, jak v kolekci zjistím příponu resource souboru - myslím tím příponu (gif, jpg, png atd.). Typ (string image, binary) to jsem našel ale s tou příponou si nevím rady.

Děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Přípona je součástí názvu resource, který je ve tvaru <Výchozí Namespace>.<Název resource>. Pokud tedy uložíte něco do resources pod názvem Obrázek.jpg, pak ve výchozím stavu by to mohlo být například WindowsApplication1.Obrázek.jpg. Přípona ale nemusí být v názvu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den, děkuji za odpověď

Mám v resources soubory "*.txt", "*.gif", "*.png", "*.jpg", "*.ico" i "*.exe". Kolekce mi vrací název bez přípony. Jsem schopen rozlišit typ souboru tzn "exe" = Byte, "txt" = String, "ico" = Icon ale ostatní jsou všechny typu Bitmap a rozlišit to stále nedokážu. Viz:

Dim rsm As Resources.ResourceManager = My.Resources.ResourceManager
            Dim resources = rsm.GetResourceSet(My.Application.UICulture, True, True)
            
            For Each resource In resources
                'získat název souboru
                Dim resName As String = resource.key.ToString
                Dim resType As String = rsm.GetObject(resName).GetType.Name

                Select Case resType.ToString

                    Case "Bitmap"
                        'tady nevím jak zjistit,
                        'jestli se jedná o jpg, gif, png, bmp

                        '....nějaká akce
                    Case "String"
                        '....nějaká akce
                    Case "Icon"
                        '....nějaká akce
                    Case "Byte[]"

                End Select

                resType = Nothing
                resName = Nothing
            Next

            resources = Nothing
            rsm = Nothing

Řešil jsem to tak, že jsem si vygeneroval názvy souborů i spříponou vložených do resource (třeba v Total Commander), pak vyhledal shodu názvů a doplnil příponu ale to se mi zdá jako pras... neelegantní (souborů je poměrně hodně). Takže zkouším jinak ale zatím bez výsledku...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Mě by hlavně zajímalo, na co řešíte takové hovadiny, když si můžete všechny resources naklikat v návrhovém prostředí a z kódu je pak pohodlně používat jako vlastnost příslušného datového typu a žádné koncovky nebo názvy znát nemusíte.

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Mám aplikaci vázanou na konkrétní USB (SerialNumber) která využívá obrázky a texty - jsou uloženy v různých složkách pevně daných u aplikace, tyto texty mohu z programu upravovat tudíž asi natáhnout je všechny do resource by mi asi nepomohlo. Postupem času přidávám další položky (jak texty i picture). Problém je v tom, že program mají i další uživatele a systém zaslat jim nový obrázek či text potřebný pro chod nové (upravené) verze programu s tím, že si jej mají uložit do daných složek totálně selhal - neumí. Aktualizaci řeším teda tak, že jsem si udělal Setup.exe, kde do resource natáhnu jednak novou verzi programu plus všechny nové soubory, zašlu uživateli a ten jej spustí. Setup.exe si zkontroluje USB a sám aktualizuje základní aplikaci, doplní nové položky či případně aktualizuje nápovědu.

Možná je to trochu kostrbaté, vb net se učím teprve chvíli, třeba časem přijdu na elegantnější řešení. Jinak dík za odpovědi

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud nemáte ty věci v resources, potom tedy nechápu, jak vám mohl pomoct mnou výše uvedený kód, který funguje pouze pro věci uložené v resources. Postup, který uvádíte pro aktualizaci je naprostá katastrofa, proč neřešíte aktualizace například pomocí bezobslužné instalace vytvořené v InnoSetupu?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

v aktualizačním exe ty věci samozřejmě mám v resources, jen jsem nevěděl jak je roztřídit (podle formátu) abych je extrahoval do patřičných složek. S InnoSetup nemám žádné zkušenosti, ale jak říkal klasik "chybami se člověk učí", kouknu se na něj - děkuji za tip

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě dodatek: ten můj "Setup.exe" lze spustit pouze z USB. Když se spustí, zjistí, zda je to to "správné USB" s mojim programem "Aplikace.exe", když ano tak pouze doplní novinky (*.jpg,*.txt atd.) do složek a přepíše původní "Aplikaci.exe". Nic víc nepotřebuji. Nevím zda lze takto nastavit InnoSetup - kouknu se.

Většina lidí, kteří mají moji aplikaci (něco numerologie, tarot a podobně), nemají vůbec žádne zkušenosti s pc. Věřte mi, že někdy je i dost heroický ukol vysvětlit jim třeba, jak stáhnout přílohu z emailu, nedej bože rozbalit zip(rar). O nějakém nastavování tedy, jak a co kde nainstalovat nemá smysl - proto tohle. Řešení typu poslat obrázky, texty a chtít po nich jen aby si to stáhli a uložili do daných složek na USB je zcela zbytečná prostě to nejde a raději to ani nezkoušejí.

můj kod bude určitě (jak se říká) pěkná "prasárna", znalce by asi "omyli", ale aspoň je co zlepšovat a učit se. Proto dík za tenhle web a za podněty.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

dík za tu kolekci, kdyby ještě někoho zajímalo to určení formátu resource souboru, zde je funkce na uložení obrázku z resource - možná trochu kostrbatá, ale funguje.

    Private Function f_ExtractImage(ByVal ImageName As String) As Short
        Try
            Dim rsm As ResourceManager = My.Resources.ResourceManager
            Dim bmp As Bitmap = rsm.GetObject(ImageName)
            Dim bmpFormat As Object = bmp.RawFormat
            Dim imgFormat As String = "unidentified format"

            If bmpFormat.Equals(bmpFormat.Bmp) Then
                imgFormat = "bmp"
            ElseIf bmpFormat.Equals(bmpFormat.Gif) Then
                imgFormat = "gif"
            ElseIf bmpFormat.Equals(bmpFormat.Jpeg) Then
                imgFormat = "jpg"
            ElseIf bmpFormat.Equals(bmpFormat.Png) Then
                imgFormat = "png"
            ElseIf bmpFormat.Equals(bmpFormat.Icon) Then
                imgFormat = "ico"
            End If
            'uložit obrázek
            If imgFormat <> "unidentified format" Then
                Dim sPath As String = Path.Combine(m_ImageFolder, ImageName & "." & imgFormat)
                bmp.Save(sPath)
                sPath = Nothing
            End If

            imgFormat = Nothing
            bmpFormat = Nothing
            bmp = Nothing
            rsm = Nothing

            Return 0

        Catch

            'nastala chyba
            Return 1

        End Try

    End Function

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback