Ondřej Linhart

Vývojářský blog Ondřeje Linharta



Podle kategorie

My.Settings u mobilních aplikací

Ondřej Linhart       28. 1. 2012       VB.NET       5735 zobrazení

Při vývoji mobilních aplikací (aplikace pro Windows Mobile 5.x, 6.x nebo Windows CE) určitě narazíte na to, že zcela chybí podpora pro My.Settings - Visual Studiem (Visual Basicem) vytvořený kód pro přístup ke konfiguračním hodnotám vizuálně naklikaným ve vlastnostech projektu. Důvod proč to u mobilních aplikací není nechápu, stejně jako chybějící My.Application.Info, ze kterého jsou přístupné často používané položky jako např. ProductName (používám jako text záhlaví TaskDialogů/MessageBoxů).

Řešením je napsat jednoduchý modul a pro přístup ke konfiguračnímu XML souboru použít Smart Devices Framework, nepostradatelný soubor knihoven pro mobilní vývojáře. Konfigurační soubor je nejlepší pojmenovat stejně jako u desktopových aplikací (*.exe.config) a umístit ho do složky s programem. Vzhledem k tomu, že u mobilních Windows je pouze jeden uživatelský účet, nemá smysl řešit konfigurační hodnoty specifické pro jednotlivé uživatele. Bude pouze jeden konfigurační soubor pro celou aplikaci, ale narozdíl od desktopových aplikací může být i pro zápis (neřeší se ACL u složky Program Files). Formát konfiguračního souboru je téměř identický s desktopovou verzí, ale drobné odlišnosti tam jsou.

Ukázkový SmartDeviceApplication1.exe.config:

<?xml version='1.0' encoding='utf-8'?>
<SettingsFile>
  <SettingsGroups>
    <group name='Ftp' />
  </SettingsGroups>
  <Ftp>
    <Host>
      <Type>System.String</Type>
      <Value>169.254.0.2</Value>
    </Host>
    <Port>
      <Type>System.Int32</Type>
      <Value>22</Value>
    </Port>
  </Ftp>
</SettingsFile>

Modul pro přístup k nastavením (potom se kdekoliv v aplikaci používá pomocí My.Settings.*):

Imports OpenNETCF.AppSettings
Imports System.IO
Imports System.Reflection
Namespace My
  Friend Module Settings
    Private _configFilePath As String
    Private _host = "169.254.0.1"
    Private _isLoaded As Boolean
    Private _port = 21
    ReadOnly Property ConfigFilePath() As String
      Get
        If _configFilePath Is Nothing Then
          Dim codeBase = Assembly.GetExecutingAssembly().GetName().CodeBase
          _configFilePath = Path.Combine(Path.GetDirectoryName(codeBase), _
                                         Path.GetFileName(codeBase) & ".config")
        End If
        Return _configFilePath
      End Get
    End Property
    Property Host() As String
      Get
        If Not _isLoaded Then Reload()
        Return _host
      End Get
      Set (ByVal value As String)
        _host = value
      End Set
    End Property
    Property Port() As Integer
      Get
        If Not _isLoaded Then Reload()
        Return _port
      End Get
      Set (ByVal value As Integer)
        _port = value
      End Set
    End Property
    Sub Reload()
      If Not File.Exists(ConfigFilePath) Then Save()
      Dim configFile As New SettingsFile(ConfigFilePath)
      With configFile.Groups("Ftp")
        _host = DirectCast(.Settings("Host").Value, String)
        _port = DirectCast(.Settings("Port").Value, Integer)
      End With
      _isLoaded = True
    End Sub
    Sub Save()
      Dim configFile As New SettingsFile(ConfigFilePath)
      With configFile.Groups("Ftp")
        .Settings("Host").Value = _host
        .Settings("Port").Value = _port
      End With
      configFile.Save()
    End Sub
  End Module
End Namespace

Do projektu je nutné přidat referenci na soubor OpenNETCF.AppSettings.dll ze SDF. Při potřebě nové konfigurační hodnoty se musí přidat nové vlastnosti do modulu Settings, komfort naklikávání vlastností je nutné oželit.

 

hodnocení článku

1 bodů / 1 hlasů       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

Diskuse: My.Settings u mobilních aplikací

byl ten, že jsem prováděl testování zásuvných modulů pro Windows Live Writer, zde se totiž v náhledu při publikování konceptu nezobrazuje vůbec nic. Původně jsem zde měl kód v podobě obrázku, ale to je velmi nepraktické.

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.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • 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