2016-08-03 39 views
0

Ich versuche, die Sichtbarkeit eines Bildes auf einem Timer schalten zu lassen. Das Bild, das ich ändern möchte, ist Unterstreichung (i). Hier ist der Code:Ändern der Kontrolle (das ist in einem Array) von einem Timer: funktioniert nicht

Dim DigitSelected As Integer = 1 
Public Underscores(3) As PictureBox 
.... 
Private Sub CursorTimer_Tick(sender As System.Object, e As System.EventArgs) Handles CursorTimer.Tick 
    Me.Underscores(DigitSelected).Visible = Not (Me.Underscores(DigitSelected).Visible) 
End Sub 

Dieser Code oben vorher arbeitet, aber vor kurzem zog ich, wo ich auf einer anderen Seite die PictureBox und ihre Sachen zu einem Modul zu erstellen:

With Initials 
For i As Byte = 1 To 3 
    .Underscores(i) = New PictureBox 
    With .Underscores(i) 
     .Height = 60 
     .Width = 144 
     .ImageLocation = "Underscore.png" 
     .BackColor = Color.Transparent 
    End With 
    .Controls.Add(.Underscores(i)) 
Next 
end with 

Nun, wenn ich Das oberste Code-Snippet löst keine Fehler aus und ändert nichts. Ich bin mir ziemlich sicher, dass ich nur etwas Kleines vermisse.

Irgendwelche Ideen? Vielen Dank!

+0

So bewegen Sie Ihren Code auf ein Modul, was bedeutet dann den Punkt in zum Beispiel '.Underscores (i) = New PictureBox' beziehen sich auf? –

+0

@VisualVincent Entschuldigung, ich habe den Code aktualisiert, um 'Mit Initialen' und 'Ende mit' einzuschließen. Das Modul verweist auf die ursprüngliche Form, die Initialen genannt wird. –

+0

Aus meiner Erfahrung scheinen Module manchmal nicht wie erwartet zu funktionieren. Ich weiß nicht den Grund dafür, aber was passiert, wenn Sie es in eine Klasse ändern und alle Methoden als 'Shared' markieren? Das bedeutet natürlich, dass Sie auch auf die Klasse verweisen müssen, zum Beispiel: 'yourClass.DoYourStuff()'. –

Antwort

0

ich nicht genau wissen, was Sie hier zu erreichen versuchen, aber hier ist, was passiert:

Jedesmal, wenn man diese Schleife laufen, können Sie drei transparente PictureBox erstellen , dass Sie Ihr Hauptformular hinzufügen. Du entfernst nichts und versteckst auch nichts!

Wenn Sie die Sichtbarkeit ändern möchten, ist dies keine Möglichkeit!

Am besten wäre es für Sie, die PictureBox Namen zu kennen, so können Sie tun:

Dim pb1 = CType(Initials.FindControl("MyPictureBox", true), PictureBox) 
If Not IsNothing(pb1) Then 
    pb1.Visible = Not pb1.Visible 
End If 
+0

Haha! Du hattest Recht. Ich dachte nicht, dass ich die Steuerelemente dupliziere, aber dann erkannte ich, dass ich den Code, der die Steuerelemente erstellte, in den Bereich legte, der ihre Positionen festlegen sollte (der normalerweise aktualisiert wird und daher mehrmals aufgerufen wird). Also habe ich dieses Stück Code verschoben, stattdessen einen einzigen Anruf erstellt und voila! Danke einen Haufen! –