Jump to content
wearefree

My.Settings

Recommended Posts

wearefree

Bom Dia

estou a tentar usar o my.settings no meu programa mas estou com uma pequena dificuldade, porque eu quero que outras pessoas usem o programa noutro pc e não posso gravar os ficheiros no meu disco e tem de ser algo que passo ir buscar os ficheiros quando eu utilizo o programa noutro pc.

e tenho isto no meu form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        My.Settings.IVA = InputBox("Introduza o valor do IVA, mas com virgula")
        My.Settings.Save()
        My.Settings.Reload()
        Iva = My.Settings.IVA
        Label5.Text = ("IVA:" & Iva)
        TextBox2.TabIndex = 0

    End Sub

aqui grava ok tudo bem, mas eu não quero que faça sempre a pergunta quando eu inicializo o programa basta só uma vez eu introduzir o valor e fica sempre gravado

porque eu antes tinha assim

Dim ficheiro As String = "C:\Users\Rui\Desktop\Projecto calculadora\calculadora.config"
        Dim fileReader As String
        If System.IO.File.Exists(ficheiro) = True Then
            fileReader = My.Computer.FileSystem.ReadAllText("C:\Users\Rui\Desktop\Projecto calculadora\calculadora.config", System.Text.Encoding.Default)
            Iva = fileReader
        Else
            Iva = InputBox("Introduza o valor do IVA mas com virgula")
            Dim Arquivo As New System.IO.FileStream("C:\Users\Rui\Desktop\Projecto calculadora\calculadora.config", IO.FileMode.OpenOrCreate)
            Dim Escrever As New System.IO.StreamWriter(Arquivo)
            Escrever.Write(Iva)
            Escrever.Close()
            MessageBox.Show("Iva Gravado é " & Iva)

        End If

antes funcionava e só perguntava se não tivesse o ficheiro, se o ficheiro tivesse gravado já com o valor o programa nem se quer fazia a pergunta e eu pretendo isso.

cumprimentos

Share this post


Link to post
Share on other sites
ribeiro55

Com My.Settings, o ficheiro está lá sempre.

Isto porque não existe somente para uma propriedade, mas para todas.

Para simulares a falta do ficheiro, controla antes a falta do valor.

Se por defeito o valor do IVA for "" (vazio) (caso seja string) ou -1 (caso seja integer), quando as settings forem carregadas basta verificares se o IVA é vazio ou -1 (num caso ou no outro).

Caso seja, podes apresentar a InputBox, porque ainda não foi mexido. Caso não seja, tem um valor, já não precisas de chamar a InputBox.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
wearefree

Coloquei assim

 
If Iva = "" Then
            My.Settings.IVA = InputBox("Introduza o valor do IVA, mas com virgula")
            My.Settings.Save()
            My.Settings.Reload()
        Else
           
            Iva = My.Settings.IVA
        End If

Mas assim não está a fazer-me a pergunta e esta a correr o programa sem valor nenhum no Iva

eu tenho o Iva como Decimal

Share this post


Link to post
Share on other sites
ribeiro55

Se é decimal (e ainda bem que é, porque é o mais correcto) então estás a formular mal a condição. Estás também a utilizar a variável errada. Tens de testar o Iva das settings e não uma variável Iva que para aí tenhas.

Bastaria algo assim:

        If My.Settings.IVA <= 0 Then
            My.Settings.IVA = Decimal.Parse(InputBox("Introduza o valor do IVA, mas com virgula").Replace(",","."))
            My.Settings.Save()
        End If

Depois das duas uma: Ou usas directamente My.Settings.IVA onde precisas dele, ou escreves para a tal variável de Iva que tens, mas na minha opinião, essa variável Iva é redundante.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
wearefree

E se eu quiser alterar o IVA, como todos nós sabemos o Iva está sempre alterar..

Dim resposta As Object

        resposta = InputBox("Mude o valor do IVA mas com virgula")
        Do
            If Not IsNumeric(resposta) And resposta = "" Then
                MsgBox("Inválido, digite novamente...", vbCritical)
                resposta = InputBox("Mude o valor do IVA mas com virgula ")

            Else

                My.Settings.IVA = InputBox("mude o valor")
                My.Settings.Save()
                My.Settings.Reload()
                Iva = My.Settings.IVA
                Iva = resposta

assim faz'me sempre duas perguntas e alterar'me o IVA ok, mas se reniciar o iva que tinha alterado não fica gravado, tenho que fazer tudo novamente  :bored:

Share this post


Link to post
Share on other sites
ribeiro55

Como assim "se quiser alterar o iva" ?

Altera e faz save... fica-te permanentemente gravado, para aquele user naquela máquina.

Tens para aí uma confusão. Sugiro que esqueças a variável Iva. Onde a usas, substituí simplesmente por My.Settings.IVA.

Esquece o reload também. Só precisarias do reload se alterasses o ficheiro manualmente, que não é o caso.

Para usar só precisas de fazer:

My.Settings.IVA

Para gravar, só precisas de dar um valor e gravar:

My.Settings.IVA = 23
My.Settings.Save

O ficheiro está lá sempre e é carregado automáticamente sempre que a aplicação arranca.

Com isto assente, basta no arranque (por exemplo no form_load):

If My.Settings.IVA <= 0 Then
    My.Settings.IVA = Decimal.Parse(InputBox("Mude o valor do IVA mas com virgula"))
    My.Settings.Save
End If

Isto fará com que o valor seja definido caso seja 0 ou menor que zero.

Para os restantes casos, não pergunta.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
ruiribeiro

Peço desculpa por me intrometer no vosso raciocinio... mas não será o My.Settings um objecto "por utilizador"... se assim for, acredito que esta abordagem esteja errada partindo do pressuposto que o que se pretende guardar são as settings da aplicação, independente do utilizador, e da máquina onde esteja instalada.

Sugiro que as settings sejam guardadas na BD.


.NET/T-SQL, JAVA, PHP, Javascript Developer | Business Intelligence | Gestão de Sistemas de Informação Empresariais

Share this post


Link to post
Share on other sites
ribeiro55

Eu estou a partir do início em que não existe BD.

My.Settings é, de facto, diferente para cada utilizador (em User scope) mas serve o mesmo propósito do ficheiro encostado ao EXE.

Aliás, serve-o ainda melhor porque não corre o risco de dar com o nariz no UAC.

wearefree, terás de explicar um pouco melhor o âmbito da tua necessidade para que te possa ser aconselhada a solução que faça mais sentido.

Aproveita para indicar se estás a recorrer a BD pois se estás, só faz sentido que tenhas lá o valor.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
wearefree

O que pretendia era

tu abres o programa e na 1 vez que abrires faz a uma perguntar "qual  é o IVA", e tu indicas e fica gravada ok?

ao estares a fazeres as contas tu queres alterar o IVA, e o IVA que alteras'te que fique gravado. para a próxima inicialização do programa o IVA que tinhas alterado aparecesse, e não o antigo.. é isso

Share this post


Link to post
Share on other sites
ruiribeiro

Inicialmente estava a pensar que seria uma aplicação de gestão ou contabilidade... e que essas seriam as settings da aplicação... nesse contexto não seria viável guardar os valores por utilizador...

Agora percebi que estamos a falar de preferências de utilizador... Sendo assim, e depois de explicado o objectivo, o My.Settings pode ser uma boa opção.  :cheesygrin:


.NET/T-SQL, JAVA, PHP, Javascript Developer | Business Intelligence | Gestão de Sistemas de Informação Empresariais

Share this post


Link to post
Share on other sites
ribeiro55

Então wearefree, já te dei a solução.

Só tens de garantir que fazes My.Settings.Save depois de alterares e da próxima já te aparece o novo e não "o antigo"


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.