disable een compleet form

Status
Niet open voor verdere reacties.

dejobse

Gebruiker
Lid geworden
7 jul 2008
Berichten
722
hallo,

Ik zou graag in een simpel programmaatje een formulier helemaal disablen.

in het programma klik je op een knop "invoegen" dan opent er een frm2 over het vorige frm1, ik wil dus dat je niks meer kan met die frm1...
de volgende code doet al iets, maarja het is toch niet wat ik wil, de sluitknop, minimaliseer en vergroten moeten ook gedisabled zijn, en liefst nog zon foutmeldings geluidje als je erop klikt.

Code:
        Dim ctrl As Control
 
        For Each ctrl In Me.Controls
            ctrl.Enabled = False
        Next
ik hoop dat iemand me kan helpen.

alvast bedankt in iedergeval
 
Als je frm2 op deze manier aanroept, kun je niet meer bij Form1 komen todat je Form2 weer afsluit:

Code:
frm2.ShowDialog()
Ervan uitgaand dat frm2 de naam is van het form.
 
hmm, zou ik je nog een vraagje kunnen stellen?

stel het formulier dat openspringt, hier vul je gegevens in, deze gegevens moeten in een array komen die in het andere formulier zit, ik dacht gewoon alles op public zetten en dan is het in orde, maar dit is dus niet zo...
 
Je kan controls in frm1 benaderen door eerst frm1 in te voeren in je code, en vervolgens de control waar je data naar toe wilt schrijven. Bijvoorbeeld:

frm1.TextBox1.Text = "Iets"
frm1.ListBox1.SelectedIndex = 2

Of is dat niet wat je zoekt?
 
nee ik denk het niet:
dus je hebt frm 1: hierin staat een array, vb array1(,)
dan in frm 2: 2 staan 25 textboxe(gewoon een voorbeeld) 5 op 5 hier vul je deze allemaal in, en je klikt op opslaan, frm 2 sluit en frm 1 opend en in frm 1 staan nu de gegevens in de array...

dankje voor de reactie :)
 
Dan moet je een Module maken. In je Solution Explorer kun je een module toevoegen aan je project.
In de module declareer je dan je array:

Code:
Public EenArray() As String

Let op: gebruik het sleutelwoord Public en niet Dim.

Nu kun je overal in je project EenArray benaderen.
 
aha, dan weet ik gelijk wat mijn fout had, ik had eerst private staan, als ik private public maakte gaf hij een fout, maar moet je de array gewoon aanmaken direct in de module of eerst een sub maken?
 
tgoh nog 1 vraagje,
ik zou vb, als rij 1,2,3 al ingevuld zijn in de array dan moete 4,5,6 erbij, maar 1,2,3 moeten blijven staan, met een gewone redim gaat dit niet, dan zijn de gegevens van 1,2,3 er ook uit...
Code:
        Dim bovengrens As Integer
        If IsNothing(stragenda) Then
            ReDim Preserve stragenda(0, 2)
        Else
            bovengrens = stragenda.GetUpperBound(0) + 1
            ReDim stragenda(bovengrens, 2)
        End If
        stragenda(bovengrens, 0) = txtNaam.Text
        stragenda(bovengrens, 1) = dtpdatum.Text
        stragenda(bovengrens, 2) = rtbbericht.Text

dit is nu mijn code
 
Je moet de araay direct aanmaken, je hoeft geen sub te maken.
Maar ik ben verder niet zo bekend met redim enzo, maar je zou ook een ArrayList kunnen gebruiken. Deze kun je vullen door middel van de Add method.

Code:
Public aList As New ArrayList

Om dingen erin te stoppen doe je:

Code:
aList.Item.Add( ... )
 
ja zo heb ik het nu staan, alleen jammer want het is voor school en ik betwijfel of ik een array list ga mogen gebruiken, want dat hebben we nog niet geleerd :/
 
Tsja, dan houd het verder op.

Een array is een array. Misschien krijg je wel extra punten als je een arraylist gebruikt. :P
 
nee ik denk het niet:
dus je hebt frm 1: hierin staat een array, vb array1(,)
dan in frm 2: 2 staan 25 textboxe(gewoon een voorbeeld) 5 op 5 hier vul je deze allemaal in, en je klikt op opslaan, frm 2 sluit en frm 1 opend en in frm 1 staan nu de gegevens in de array...

dankje voor de reactie :)

3up1F.png


Resultaat

jxAtS.png


Totaal onnodig, zo'n module. Modules zou ik alleen gebruiken wanneer je alles gaat structureren; netjes maken.

Code:

Form1:
PHP:
Public Class Form1

    Public Gegevens(4) As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Form2.ShowDialog()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim s As String = ""
        For i As Short = 0 To Gegevens.Length - 1
            s += Gegevens(i) + Environment.NewLine
        Next
        MessageBox.Show(s)
    End Sub
End Class

Form2:
PHP:
Public Class Form2

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Form1.Gegevens = New String() {txtNaam1.Text, txtNaam2.Text, txtNaam3.Text, txtNaam4.Text, txtNaam5.Text}
        Me.DialogResult = DialogResult.OK
    End Sub
End Class
 
Ach ja natuurlijk, je kan ook de variable zelf opvragen door eerst het form op te roepen waar die gedeclareerd is, net zoals je properties van controls opvraagt zoals ik al eerder liet zien:

Code:
Form1.TextBox1.Text
Form1.EenVar
 
Ervoor:

ldoFW.png


Erna:

SS816.png


Code:

PHP:
    Dim A(2) As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        A = New String() {A(0), A(1), A(2), "Nieuwe Data1", "Nieuwe Data2", "Nieuwe Data3"}
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        A(0) = "Brian"
        A(1) = "Brian2"
        A(2) = "Brian3"
    End Sub
 
dankjewel voor de reactie, maar het was niet echt wat ik zocht, wat ik zocht is eigenlijk gewoon redim preserve :')
maar kan ik jullie nog even lastig vallen?
nu staat het in de array in een module, maar ik wil nu als ik in form2 op toevoegen klik, gaat form2 weg en zie je form 1, nu moeten die gegevens in een listbox komen in form 1 zonder op een knop te klikken, on formload gaat niet timertick dacht ik dan, maar dat is ook niet ideaal, dan flikkert het bij elke timer+ lijkt me wat onprofessioneel... is hier nog een mogelijkheid voor?
 
Niet echt wat je zocht? Als ik zo deze code vergelijk doen ze in principe vrijwel hetzelfde, en het resultaat is gewoon hetzelfde, maar de 'new string' manier is met veel minder regels code :)

De uwen:
PHP:
Dim bovengrens As Integer
        If IsNothing(stragenda) Then
            ReDim Preserve stragenda(0, 2)
        Else
            bovengrens = stragenda.GetUpperBound(0) + 1
            ReDim stragenda(bovengrens, 2)
        End If
        stragenda(bovengrens, 0) = txtNaam.Text
        stragenda(bovengrens, 1) = dtpdatum.Text
        stragenda(bovengrens, 2) = rtbbericht.Text

De mijnen:
PHP:
A = New String() {A(0), A(1), A(2), "Nieuwe Data1", "Nieuwe Data2", "Nieuwe Data3"}

Scheelt toch zo'n 9 extra regels ;)

En voor die listbox:
Dit in je Form_load zetten:

PHP:
        For i As Integer = 0 To Form2.DeArray.Length - 1
            ListBox1.Items.Add(Form2.DeArray(i))
        Next
 
maar
Code:
A = New String() {A(0), A(1), A(2), "Nieuwe Data1", "Nieuwe Data2", "Nieuwe Data3"}
snap ik niet, als je hem uitlegt misschien wel, en dat zou dan inderdaad wat mooier zijn! maar kan ik hiermee ook gegevens uit texboxen in de array zetten?
 
Dat betekend dat die de waarde die al in A zitten nogmaals opnieuw toevoegd plus de nieuwe data.
 
Deze code zou precies moeten zijn wat je wilt hebben:
PHP:
NaamVanDeArray = New String() {NaamVanDeArray(0), NaamVanDeArray(1), NaamVanDeArray(2), txtNaam.Text, dtpdatum.Text, rtbbericht.Text}

Wat deze code doet, is van de oude array een nieuwe array maken, de eerste 3 items van de vorige array nemen, dmv "NaamVanDeArray(PositieVanItemInArray)", en daarna de nieuwe items erachter te zetten.

New String() betekent dat je een nieuwe array aanmaakt van strings.
{data hier} geeft aan wat er in de array moet komen te staan. De lengte van de array word automatisch aangepast.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan