Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

rycardo_

Hora no Vb

Recommended Posts

rycardo_

Boa Noite,

Eu gostava de saber como adiciono a hora actual numa tool strip status numa form, mas não faço a minima ideia de como o fazer...

Alguma sugestão?

Cumprimentos

Share this post


Link to post
Share on other sites
softklin

Podes adicionar uma label à statusbar, e com um timer ir actualizando a hora. Não deve apresentar dificuldades.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
rycardo_

System.DateTime.now

o problema é que eu não sei aplicar....

sou muito noob

fica ToolStripStatusLabel1 = System.DateTime.Now?

Share this post


Link to post
Share on other sites
malainhocf

Eu fiz assim

ToolStripStatusLabel1.Text = today()

Mas tens que colocar um timer no form e depois usares o evento tick

Tens que por o timer com intervale igual a 1000

Coloca o enable em true

Assim vai funcionar


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
ribeiro55

Se quiseres só o relógio:

ToolStripStatusLabel1.Text = Now.ToShortTimeString

Se quiseres tudo, mesmo à chefe:

ToolStripStatusLabel1.Text = Now.ToString

Qualquer formato é possível.


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
rycardo_

Eu fiz assim

ToolStripStatusLabel1.Text = today()

Eu consegui com "ToolStripStatusLabel1.Text = System.DateTime.Now", mas nao mexe os segundos, como eu faço para os segundos "andarem" também?

Pensei em usar um timer, mas também não sei de que forma o usar

Share this post


Link to post
Share on other sites
ribeiro55
    Private WithEvents Relogio As New Timer With {.Interval = 900, .Enabled = True}

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

    Private Sub MostraRelogio() Handles Relogio.Tick
        ToolStripStatusLabel1.Text = Now.ToShortTimeString & ":" & Now.Second.ToString.PadLeft(2, Char.Parse("0"))
    End Sub


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
malainhocf

Lê o update que eu fiz a minha mensagem anterior

Tens que colocar o timer, propriedades enable a true e intervale a 1000

Colocas o código dentro do evento tick

E vai funcionar

Today() só da a data, tens razão


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
malainhocf

Private  WithEvents Relogio As New Timer With {.Interval = 900, .Enabled = True}

Ribeiro55 não conhecia isso ai em cima

Para mim é novidade :(


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
rycardo_

    Private WithEvents Relogio As New Timer With {.Interval = 900, .Enabled = True}

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        MostraRelogio()
    End Sub
    Private Sub MostraRelogio() Handles Relogio.Tick
        ToolStripStatusLabel1.Text = Now.ToShortTimeString & ":" & Now.Second.ToString.PadLeft(2, Char.Parse("0"))
    End Sub

se eu usar

"ToolStripStatusLabel1.Text = Now.ToString & ":" & Now.Second.ToString.PadLeft(2, Char.Parse("0"))"

aparece duas vezes os segundo do genero hora:minutos:segundos:segundos

Share this post


Link to post
Share on other sites
ribeiro55

Então mete só ToolStripStatusLabel1.Text = Now.ToShortTimeString.

É porque o teu locale ou SO estão orientados para esse formato.

Aqui (WXPSP3-PT) aparece só HH:MM, por isso acrescentei os segundos.


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
jpaulino

@ribeiro55 ,

Porque Interval = 900 e não Interval = 1000 ? É que assim nunca vai andar certo (se bem que tem pouca importância, mas é um preciosismo)

@rycardo_ ,

Coloca desta forma:

ToolStripStatusLabel1.Text = DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss")

Share this post


Link to post
Share on other sites
ribeiro55

@jpaulino

Foi uma mania que apanhei.

O Interval não é certinho (ou pelo menos não era) e em certos casos com refrescamento de um segundo, podem saltar segundos, se o limite for muito à justa, como é o caso de 1000msecs.

Se os 1000msecs se traduzirem em 1001, o segundo anterior salta para o próximo, ignorando o do meio.

Já me aconteceu ver isso :)

Com os 900msecs garanto que a actualização é feita correctamente.

Mas lá está... pode ter sido uma burrice da altura e não ter actualizado por uma razão ou outra, e eu fiquei com a mania.

@rycardo_

jpaulino a rematar novamente a solução ideal ;)

Ainda tenho pouco hábito das facilidades que nos são disponibilizadas.


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
jpaulino

@jpaulino

Foi uma mania que apanhei.

O Interval não é certinho (ou pelo menos não era) e em certos casos com refrescamento de um segundo, podem saltar segundos, se o limite for muito à justa, como é o caso de 1000msecs.

Se os 1000msecs se traduzirem em 1001, o segundo anterior salta para o próximo, ignorando o do meio.

Já me aconteceu ver isso :)

Com os 900msecs garanto que a actualização é feita correctamente.

Mas lá está... pode ter sido uma burrice da altura e não ter actualizado por uma razão ou outra, e eu fiquei com a mania.

Os problemas podem ser de outras threads que estejam a bloquear a actualização. Usar, por exemplo, um backgroundworker pode ajudar, mas à partida não é preciso.

Share this post


Link to post
Share on other sites
rycardo_

@ribeiro55 ,

Porque Interval = 900 e não Interval = 1000 ? É que assim nunca vai andar certo (se bem que tem pouca importância, mas é um preciosismo)

@rycardo_ ,

Coloca desta forma:

ToolStripStatusLabel1.Text = DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss")

Muito obrigado, funciona na perfeição, muito obrigado a todos...

Share this post


Link to post
Share on other sites
flaviojef

ate tinhas outra forma de pores as horas e o data actual na minha optica mais facil

crias uma label das por exemplo o nome de lbl_relogio

depois vais buscar um objecto chamado timer e colocas no form que queres respectivo onde crias.te a label

e dentro desse timer colocas isto:

'relogio
        Dim relogio As DateTime = Hour(Now) & ":" & Minute(Now) & ":" & Second(Now)
        lbl_relogio.Text = relogio.ToString("HH:mm:ss")

e no mesmo sitio onde colocas este codigo podes meter o da data com outra nova label por exemplo lbl_data:

'data
Dim data As Date = DateValue(Now)
        lbl_data.Text = data.ToString("dd-MM-yyyy")

eu penso que desta forma é muito mais facil, até porque se nao precebes la muito disto é mais facil de entender

boa sorte

Share this post


Link to post
Share on other sites
ribeiro55

Em que aspecto é que é mais fácil?

No mínimo é exactamente a mesma coisa.


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
flaviojef

sim é a mesma coisa mas na minha optica é mais facil de compreender... só isso

Share this post


Link to post
Share on other sites
jpaulino

sim é a mesma coisa mas na minha optica é mais facil de compreender... só isso

Não é nada a mesma coisa!!!

        Dim relogio As DateTime = Hour(Now) & ":" & Minute(Now) & ":" & Second(Now)

Aqui defines uma hora concatenando valores (errado). E depois usas esse valor formatando como mostrei. Não tem sentido.

Share this post


Link to post
Share on other sites
jpaulino

mas funciona

Existe tanto mau código que funciona ... até um dia!

Deves tentar sempre utilizar boas práticas de programação e não mau código :)

Share this post


Link to post
Share on other sites
flaviojef

pois eu tambem nao sou barra nisto...

nem muito menos estou a criticar quem sabe, já agora obrigado pelo conselho nunca é demais saber mais  :)

Share this post


Link to post
Share on other sites
ribeiro55

Eu estava-me a referir ao "metes um timer e metes o código dentro dele".

A única diferença para o outro é que um é criado em runtime e o outro em design.


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

×

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.