Změna lokalizace formu   zodpovězená otázka

VB.NET, WinForms

Lze nějak změnit uiCulture startovacího formu ?

Vzhledem k tomu, aby se mi kultura ui změnila musím znovu inicializiovat formulář což u startup formu nejde.

Zatím to řeším tak, že volám jiný form na kterém nic není a v load formu volám:


   me.hide()

start:
   using frm as new MainForm
      if frm.showdialog = retry then
         goto start
      else
         me.close()
      end if
   end using

Ve formu po změně cultury dám:

dialogresult = retry

me.close()

Tohle funguje, ale nelíbí se mi to.

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

UICulture není záležitost formuláře, ale hlavního vlákna aplikace. ChangeUICulture odpovídá kódu Thread.CurrentThread.CurrentUICulture.

Jinak za běhu se to bohužel měnit nedá, já to řeším tak, že si jazykové nastavení při změně uživatelem uložím do konfiguračního souboru (My.Settings) a po opětovném spuštění aplikace (v události Application.Startup) ho použiju. Aplikaci je tedy nutné po změně jazykového nastavení restartovat. Šlo by to udělat i bez nutnosti restartu, ale bylo by to zbytečně komplikované. To vaše řešení s dummy formulářem je maximální prasárna.

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

Já jsem se právě snažil o to abych aplikaci nemuset vypínat a zapínat. Jak jsem psal, řešení to je divoké, nicméně na nic jiného lepšího jsem neřpřišel.

Děkuji za odpověd

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

Uložení do konfiguračního souboru, zavolání Application.Restart() a načtení kultury je to nejjednodušší řešení. A mimochodem tak to dělá drtivá většina aplikací. Tu vaši nepoužitelnou prasárnu předělejte, neb se mi z toho dělá zle.

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

Velmi děkuji za nějaké konkrétní řešení. Bohužel jsem nevěděl, že v application je nějaká funkce Restart což ve výsledku vedlo k této diskuzi.

ps.: Na špatný žaludek jsou léky. :-D

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

Navíc pokud už jste to chtěl dělat tak debilně, tak nebyl důvod k použití dummy formuláře. Stačilo vypnout Application Framework a použít Sub Main.

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

Application framework mám vypnutý a Sub Main používám.

http://www.vbnet.cz/forum-tema--1567-me_...

    'Vytvoření instance hlavního okna
    _mainForm = New Form1
    'Pokud bude nalezen parametr, zobrazit okno
    If Environment.CommandLine.ToLower.Contains("/startup") Then
      _mainForm.Show()
    End If
    'Spustit smyčku zpracování zpráv
    Application.Run()

Problém v mém "debilním" řešení byl, že se application.Run spouští, až za form.show. Jelikož já jsem potřeboval form.ShowDialog, pro vyhodnocení změny jazyka, u kterého se čeká na zavření formu, musel bych application.run spouštět před zobrazením formu což je špatně (alespoň doufám).

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

U Windows Forms aplikace se má spouštět Application.Run s parametrem, který je instance hlavního okna aplikace. Nechápu, proč před tím potřebujete zobrazovat nějaké další okno. Pokud je to okno pro výběr jazyka, toto okno má být v neutrální kultuře a potom není co řešit.

nahlásit spamnahlásit spam 1 / 1 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