» »

[VB 2005 express] kako risati v picturebox

[VB 2005 express] kako risati v picturebox

gzibret ::

Pozdrav!

Spet se igram z Visual basicom express edition. Tokrat bi rad naredil uro, vendar se mi je zataknilo. Program vsebuje en timer, ki vsako sekundo odčita sistemski čas in ga izpiše v enem okenčku (textbox). To dela BP. Prav tako program nariše uro v posebnem oknu (picturebox1), kar tudi dela bp.

Problem pa nastane, ko hočem vsako sekundo izrisati kazalce. Tukaj pa se mi zadeva zbuni, češ, da "Graphics is not member of system.eventargs". Probal sem že z definicijo spremenljivke gr, samo tudi na takšen način ne gre, saj mi ob zagonu programa javi "Object reference not set to an instance of an object."

Zanima me, kako bi narisal in kasneje izbrisal vsaj eno malo mini črtico vsako sekundo v picturebox1? Vsakršna pomoč zelo dobrodošla, sicer pa vas bom še verjetno še kdaj malo nagnjavil :D

Koda je trenutno takšna (z uporabo spremenljivke gr).

Public Class Form1

    Dim ura As Integer
    Dim minuta As Integer
    Dim sekunda As Integer
    Dim gr As System.Windows.Forms.PaintEventArgs
    Dim blackpen As New Pen(Color.Black, 3)
    Dim ozki As New Pen(Color.Black, 2)

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

    Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click
        Application.Exit()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        TextBox1.Text = My.Computer.Clock.LocalTime.ToLongTimeString
        ura = My.Computer.Clock.LocalTime.Hour
        minuta = My.Computer.Clock.LocalTime.Minute
        sekunda = My.Computer.Clock.LocalTime.Second
        gr.Graphics.DrawLine(blackpen, 325, 40, 325, 60) ********zalomi se tukajle
    End Sub

    Private Sub PictureBox1_Paint1(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        e.Graphics.DrawEllipse(blackpen, 50, 50, 550, 550)
        e.Graphics.DrawLine(blackpen, 325, 40, 325, 60)
        e.Graphics.DrawLine(blackpen, 40, 325, 60, 325)
        e.Graphics.DrawLine(blackpen, 325, 590, 325, 610)
        e.Graphics.DrawLine(blackpen, 590, 325, 610, 325)
        e.Graphics.DrawEllipse(blackpen, 323, 323, 4, 4)
        Dim aFont As New System.Drawing.Font("Arial", 14, FontStyle.Bold)
        e.Graphics.DrawString("12", aFont, Brushes.Black, 312, 15)
    End Sub

End Class
Vse je za neki dobr!
  • spremenilo: gzibret ()

ježek ::

V timerju kliči PictureBox1.Refresh(); s čimer se bo ponovno zgodil dogodek paint. (uro potem popravljaš v dogodku paint ...)

LP

gzibret ::

Bom probal in poročam! Hvala.

Sem pa zadevo že rešil z enim snippetom, ki sem ga vstavil v proceduro timer_tick (creating windows forms and applications - drawing), ki sem ga malo priredil po svoje:

        Using redPen As New Pen(Color.Red), _
            formGraphics As Graphics = Me.PictureBox1.CreateGraphics()
            formGraphics.DrawLine(redPen, 325, 325, getxsek(sekunda), getysek(sekunda))
        End Using
Vse je za neki dobr!

gzibret ::

Ježek - tale refresh tudi dela, hvala za nasvet!

LP
Vse je za neki dobr!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

vb.net: dynamic textbox

Oddelek: Programiranje
51175 (1065) saule
»

Visual Studio - koda za prikaz OS?

Oddelek: Programiranje
91076 (843) detroit
»

[VB] Komunikacija s serijskimi napravami

Oddelek: Programiranje
412297 (1571) mNeRo
»

vb.net barchart

Oddelek: Programiranje
81023 (945) rode
»

VB.net MDI in formi splošno

Oddelek: Programiranje
91608 (1551) strel

Več podobnih tem