VBiB/ACCB.net - Visual Basic in België | .net Ineta User Group  
Hoofdmenu

Advertenties

Het Computer Winkeltje HCW


Evenementen

Forum

Plaats nieuw bericht   Plaats Reactie
Vorige onderwerp Printervriendelijke versie Log in om je privé berichten te bekijken Volgende onderwerp
Auteur Bericht
StanniemanOffline
Onderwerp: Combobox met meertalig programma  BerichtGeplaatst: 24 jan 2010 - 15:12
Rookie Developer


Geregistreerd op: 24-jan-2010
Berichten: 18

Status: Offline
Hallo,
Ik zal proberen mijn probleem een beetje duidelijk uit te leggen.
Ik heb een programma(tje) gemaakt dat automatisch je pc afsluit na een ingegeven tijd. Bij de propperties van het form staat localiza op true en language op default, daarna heb ik heel het programma in het Engels gemaakt. Er staat een combobox met 4 opties (shutdown, reboot, log off en hibernate). Als je dan op ok klikt doet die:
actie = cstr(cboCombobox.text), daarna gaat die aan de hand van wat actie is het juiste doen.

Dat werkt allemaal, tot ik ook in het Nederlands begin (dus language van default naar Dutch). Ik pas heel de interface, inclusief items in de combobox aan naar Nederlands, maar de code achter de ok knop blijft nog altijd de Engelse dingen doen. Dus als je dan in de combobox Afsluiten selecteerd, dan zegt die: actie = "afsluiten". Maar afsluiten is geen actie, die moet shutdown zijn. Als ik dan alles aanpas aan het Nederlands, klopt de Engelse weer niet meer.

Weer er iemand hier een oplossing voor? Dat bv. sommige delen van de code zelf ook gebonden zijn aan de taal, en niet alleen de inhoud van labels enzo?

Alvast bedankt, Stan
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
badboyqxyOffline
Onderwerp: Re: Combobox met meertalig programma  BerichtGeplaatst: 24 jan 2010 - 17:50
Professional Developer


Geregistreerd op: 11-jul-2008
Berichten: 459

Status: Offline
in plaats van de naam in de combobox aan te houden die je dus telkens dient te vertalen kun je veel beter de index value pakken deze is namelijk bij alle items het zelfde

en dan kun je dus ipv van afsluiten/shutdown zeggen
Code:
if combobox.selectedindex = 1 then
start.processing("shutdown.exe -f -s -t 0");


// let op start.processing is iets wat het ongeveer was .. weet het niet precies uit me hoofd
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
StanniemanOffline
Onderwerp: Re: Combobox met meertalig programma  BerichtGeplaatst: 24 jan 2010 - 17:59
Rookie Developer


Geregistreerd op: 24-jan-2010
Berichten: 18

Status: Offline
Ok bedankt, lijkt me inderdaad dat dat de beste oplossing is.
Maar dan zit ik opnieuw met een probleem: als een bepaalde checkbox is aangevinkt mogen enkel afsluiten en herstarten zichtbaar zijn:
Visual Basic code:
If chkShow_shutdownwindow.Checked = True Then
            pnlComment.Enabled = True
            cboMode.Text = "Shutdown"
            cboMode.Items.Remove("Log Off")
            cboMode.Items.Remove("Hibernate")
        Else
            pnlComment.Enabled = False
            cboMode.Items.Add("Log Off")
            cboMode.Items.Add("Hibernate")
        End If

Ik neem aan dat de items verwijderen ook gewoon via de index kan, maar hoe zit het dan als die terug in het lijstje moet? Want dat is ook weer bij elke taal verschillend.
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
WimpieOffline
Onderwerp: Re: Combobox met meertalig programma  BerichtGeplaatst: 25 jan 2010 - 08:58
Professional Developer


Geregistreerd op: 31-aug-2007
Berichten: 256

Status: Offline
Wat volgens mij nog handiger is:
Maak voor elke optie een object aan en steek elk object in een array(list). Stel deze arraylist in als datasource van je combobox en dan kan je beginnen spelen met je DisplayMember. Ongeveer zoals dit:
Visual Basic code:
Public Class Form1
    Private _List As List(Of cboItem)

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        CreateItems()
        SetLanguage("Eng")
    End Sub

    Private Sub CreateItems()
        _List = New List(Of cboItem)

        Dim MyItem1 As New cboItem
        MyItem1.Action = "Shutdown"
        MyItem1.Eng = "Shutdown"
        MyItem1.Ned = "Afsluiten"
        _List.Add(MyItem1)

        Dim MyItem2 As New cboItem
        MyItem2.Action = "Log off"
        MyItem2.Eng = "Log off"
        MyItem2.Ned = "Afmelden"
        _List.Add(MyItem2)

        'Dim MyItem3...
    End Sub

    Private Sub SetLanguage(ByVal Language As String)
        ComboBox1.DataSource = _List
        ComboBox1.ValueMember = "Action"

        Select Case Language
            Case "Eng"
                ComboBox1.DisplayMember = "Eng"
            Case "Ned"
                ComboBox1.DisplayMember = "Ned"
            Case Else
                ComboBox1.DisplayMember = "Action"
        End Select
    End Sub

    Private Sub DoAction()
        Select Case CStr(ComboBox1.SelectedValue)
            Case "Shutdown"
                '...
            Case "Log off"
                '...
        End Select
    End Sub

    Private Class cboItem
        Private _Action As String
        Private _Eng As String
        Private _Ned As String

        Property Action() As String
            Get
                Return _Action
            End Get
            Set(ByVal value As String)
                _Action = value
            End Set
        End Property

        Property Eng() As String
            Get
                Return _Eng
            End Get
            Set(ByVal value As String)
                _Eng = value
            End Set
        End Property

        Property Ned() As String
            Get
                Return _Ned
            End Get
            Set(ByVal value As String)
                _Ned = value
            End Set
        End Property

    End Class

End Class

De index gebruiken is ook een optie, maar als je dan items gaat verwijderen dan gaat de index van de andere items misschien wijzigen en kan je deze dus niet meer gebruiken...
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
StanniemanOffline
Onderwerp: Re: Combobox met meertalig programma  BerichtGeplaatst: 25 jan 2010 - 17:07
Rookie Developer


Geregistreerd op: 24-jan-2010
Berichten: 18

Status: Offline
dus je komt er zowieso nie onderuit dat er vertalingen in je programma zelf zitten, ipv. in de recource dll?
Tenzij je het echt uit tekstbestanden gaat lezen, maar dat kan ik nog niet.
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
badboyqxyOffline
Onderwerp: Re: Combobox met meertalig programma  BerichtGeplaatst: 25 jan 2010 - 19:42
Professional Developer


Geregistreerd op: 11-jul-2008
Berichten: 459

Status: Offline
kan wel moet je een xml file aanmaken
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
VozzieOffline
Onderwerp: Re: Combobox met meertalig programma  BerichtGeplaatst: 26 jan 2010 - 09:42
Erelid


Geregistreerd op: 11-mei-2009
Berichten: 958

Status: Offline
Hallo,

Als het vaste waarden zijn, zet de "Localizable" property van je form op True. Dan kan je verschillende talen selecteren en invullen,...

De taal kan je @ runtime instellen door de volgende properties,...

System.Threading.Thread.CurrentThread.CurrentUICulture
System.Threading.Thread.CurrentThread.CurrentCulture

Zijn het geen vaste waarden dan kan je verschillende taalfiles (bijv 1 per taal) toevoegen als "Application Resource" bestanden.

MyRes.nl-be.resx
MyRes.en-us.resx
...

http://msdn.microsoft.com/en-us/goglobal/bb688115.aspx

Groeten

_________________
con\con

Stappen, keuzes en herhaling combineren is programmeren.
 
 Bekijk gebruikers profiel Stuur privé bericht Bekijk de homepage  
Reageer met quote Naar boven
StanniemanOffline
Onderwerp: Re: Combobox met meertalig programma  BerichtGeplaatst: 26 jan 2010 - 19:49
Rookie Developer


Geregistreerd op: 24-jan-2010
Berichten: 18

Status: Offline
Sja ik vrees dat het dan toch voor later gaat zijn, ik ben nog maar een beginner en xml dinges maken daar ben ik nog niet aan toe denk ik. En vozzie wat jij zei werkt dus niet, want daarmee kun je de code zelf niet localiseren blijkbaar.

Toch bedankt voor de moeite allemaal
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
VozzieOffline
Onderwerp: Re: Combobox met meertalig programma  BerichtGeplaatst: 26 jan 2010 - 20:19
Erelid


Geregistreerd op: 11-mei-2009
Berichten: 958

Status: Offline
Hallo,

Stannieman schreef:
En vozzie wat jij zei werkt dus niet, want daarmee kun je de code zelf niet localiseren blijkbaar.


Wat bedoel je met "code zelf localiseren",...

Je kan op deze manier de taal veranderen van je programma terwijl het draait(@ runtime) en zelfs talen toevoegen na installatie,...

- Open Visual Studio
- New "Project"
- New "Windows Forms Application"
- Project -> Add -> New Item -> Resource.resx -> Geef naam "Resource1.resx"
- Project -> Add -> New Item -> Resource.resx -> Geef naam "Resource1.nl-be.resx"
- Project -> Add -> New Item -> Resource.resx -> Geef naam "Resource1.en-us.resx"
- Voeg in alle drie de resource files een string toe met als naam "String1"
- voor value geef je "een default waarde", "een engelse waarde" en een "nederlandse"

Code...

Visual Basic code:
Dim culture As Globalization.CultureInfo

        culture = New Globalization.CultureInfo("fr-fr")
        Threading.Thread.CurrentThread.CurrentUICulture = culture
        Threading.Thread.CurrentThread.CurrentCulture = culture
        MsgBox(My.Resources.Resource1.String1)

        culture = New Globalization.CultureInfo("nl-be")
        Threading.Thread.CurrentThread.CurrentUICulture = culture
        Threading.Thread.CurrentThread.CurrentCulture = culture
        MsgBox(My.Resources.Resource1.String1)

        culture = New Globalization.CultureInfo("en-us")
        Threading.Thread.CurrentThread.CurrentUICulture = culture
        Threading.Thread.CurrentThread.CurrentCulture = culture
        MsgBox(My.Resources.Resource1.String1)


Groeten

_________________
con\con

Stappen, keuzes en herhaling combineren is programmeren.


Laatst aangepast door Vozzie op 26 jan 2010 - 20:35, in totaal 1 keer bewerkt
 
 Bekijk gebruikers profiel Stuur privé bericht Bekijk de homepage  
Reageer met quote Naar boven
StanniemanOffline
Onderwerp: Re: Combobox met meertalig programma  BerichtGeplaatst: 26 jan 2010 - 20:34
Rookie Developer


Geregistreerd op: 24-jan-2010
Berichten: 18

Status: Offline
ik bedoel dus dat dit:
Visual Basic code:
cboMode.Items.Add("Log Off")
cboMode.Items.Add("Hibernate")

blijkbaar niet gaat met verschillende talen zonder een extern bestand of om echt alle taalopties voor de string hibernate of log off in je exe zelf te zetten zoals wimpie zei.

Als je verschillende talen maakt in je form maakt die als je build bij de exe ook voor elke taal een map met daarin een resource dll, daarin zit dat het hele culture/language gedoe. Nu zou het wel een mooie optie zijn voor in VS 2012 ofzo dat je de string kon selecteren in je code en bij rechts klikken een optie "make language dependend" ofzo zou hebben.
Dat zit dan ook in die dll in de taalmap, dus als je dan op deze manier (http://msdn.microsoft.com/en-us/library/b28bx3bh%28VS.80%29.aspx)
de taal kiest zal samen met je form ook de betreffende string in je programma gebruikt worden.

Ofwel zie ik iets serieus over het hoofd ofwel zou dat het, toch zeker voor beginners, veel simpeler maken.
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
VozzieOffline
Onderwerp: Re: Combobox met meertalig programma  BerichtGeplaatst: 26 jan 2010 - 20:38
Erelid


Geregistreerd op: 11-mei-2009
Berichten: 958

Status: Offline
Hallo,

(heb vorige post net geupdate)

En waarom gaat dit dan niet,...

Visual Basic code:
' set culture info

Me.ListBox1.Add(My.Resource1.strHibernate)
Me.ListBox1.Add(My.Resource1.strLogoff)


Groeten

_________________
con\con

Stappen, keuzes en herhaling combineren is programmeren.
 
 Bekijk gebruikers profiel Stuur privé bericht Bekijk de homepage  
Reageer met quote Naar boven
VozzieOffline
Onderwerp: Re: Combobox met meertalig programma  BerichtGeplaatst: 26 jan 2010 - 20:58
Erelid


Geregistreerd op: 11-mei-2009
Berichten: 958

Status: Offline
Hallo,

Zie bijlage,...

In form1 vul ik een listbox op afhankelijk vd taal,...

In form2 heb ik de form "localizable" property op "true" gezet en dan de listbox opgevuld voor elke taal.(form language property)

Groeten

_________________
con\con

Stappen, keuzes en herhaling combineren is programmeren.
 
 Bekijk gebruikers profiel Stuur privé bericht Bekijk de homepage  
Reageer met quote Naar boven
StanniemanOffline
Onderwerp: Re: Combobox met meertalig programma  BerichtGeplaatst: 27 jan 2010 - 13:53
Rookie Developer


Geregistreerd op: 24-jan-2010
Berichten: 18

Status: Offline
Ok ik ga dat dan toch maar eens proberen, maar waarom kan ik geen recource toevoegen? Bij add new item staat niks wat daar op lijkt.
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
StanniemanOffline
Onderwerp: Re: Combobox met meertalig programma  BerichtGeplaatst: 28 jan 2010 - 20:35
Rookie Developer


Geregistreerd op: 24-jan-2010
Berichten: 18

Status: Offline
Aha blijkbaar moet je VS pro hebben en ik heb express. Dus morgen dan maar pro installeren, ik heb hier toch nog een key liggen.

En verder lijkt dat resource gedoe wel redelijk simpel als je het eens door hebt. Gewoon een resouce maken en een string kiezen en als value wat het moet worden, dan met nl-nl etc nog recources maken voor de talen die je wil en dan in je code naar de strings verwijzen. Is het dat?
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
StanniemanOffline
Onderwerp: Re: Combobox met meertalig programma  BerichtGeplaatst: 31 jan 2010 - 12:27
Rookie Developer


Geregistreerd op: 24-jan-2010
Berichten: 18

Status: Offline
Ok het begint te lukken nu, en dit snap ik wel:
Visual Basic code:
Dim culture As Globalization.CultureInfo

        culture = New Globalization.CultureInfo("fr-fr")
        Threading.Thread.CurrentThread.CurrentUICulture = culture
        Threading.Thread.CurrentThread.CurrentCulture = culture
        MsgBox(My.Resources.Resource1.String1)

        culture = New Globalization.CultureInfo("nl-be")
        Threading.Thread.CurrentThread.CurrentUICulture = culture
        Threading.Thread.CurrentThread.CurrentCulture = culture
        MsgBox(My.Resources.Resource1.String1)

        culture = New Globalization.CultureInfo("en-us")
        Threading.Thread.CurrentThread.CurrentUICulture = culture
        Threading.Thread.CurrentThread.CurrentCulture = culture
        MsgBox(My.Resources.Resource1.String1)

maar hoe kan ik hiermee de taal terug op de default zetten die in de exe zelf zit?
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
Berichten van afgelopen:     
Ga naar:  
Tijden zijn in GMT + 1 uur
Plaats nieuw bericht   Plaats Reactie
Vorige onderwerp Printervriendelijke versie Log in om je privé berichten te bekijken Volgende onderwerp
PNphpBB2 © 2003-2007 
 

 
Postnuke - ADODB Database - PHP 4/5 - pnPhpBB2 - Hosting bij Openminds
Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno 21-12-2000)
vbib.be gestart op 1/03/06 (extra vanaf 1/09: vbnet.be en vbdotnet.be)
VBiB is gerelateerd met wintips.be

Nieuwsbrief RSS Feed: backend.php