vb.net жұмыс уақытын жасаған батырмаларды ажыратады

Hey, мен барлық динамикалық түймелерді орындау уақытында жасадым және пайдаланушы пішін түймешігіне басқанда, оларды өшіргім келеді.

Бұл батырманың коды бар:

Dim intXX As Integer = 0

Do Until intXX = intX
    userAvatar(intXX).Enabled = False
    intXX = intXX + 1
Loop

ButtonNames - барлық уақытта толтырылған түймелердің аттары, олар орындалу уақытында жасалады. Алайда, соңында .enabled = жалған болмаса, ол жұмыс істемейді. Оны орындау уақытында жасалған түймелермен тағы қандай жолдармен істеу керек?

Түймешіктерді қалай жасай аламын:

private sub createButton()
Dim personAvatar As New PictureBox

With personAvatar 
        .AutoSize = False                        '>                        ^

        If intX = 7 Then
            thePrviousAvatarImg = 0
        End If

        If intX <= 6 Then
            .Location = New System.Drawing.Point(10 + thePrviousAvatarImg, 10)
        ElseIf intX >= 7 And intX <= 14 Then
            .Location = New System.Drawing.Point(10 + thePrviousAvatarImg, 150)
        Else
            Exit Sub
        End If

        .Name = "cmd" & nameOfPerson
        .Size = New System.Drawing.Size(100, 100)
        .TabStop = False
        .Text = ""
        .BorderStyle = BorderStyle.FixedSingle
        .BackgroundImageLayout = ImageLayout.Center
        .BackColor = Color.LightGray
        .BackgroundImage = Image.FromFile(theAvatarDir)
        .Tag = nameOfPerson
        .BringToFront()
    End With

    AddHandler personAvatar.Click, AddressOf personAvatar_Click
    Me.Controls.Add(personAvatar)
    userAvatar(intX) = personAvatar
    intX = intX + 1
End With
End Sub

Сіздің уақытыңызға рахмет және көмек!

Дэвид

0

1 жауаптар

Сіз өздерінің аттарының жол ұсынуын қолданып түймешік нысандарына сілтеме бере алмайсыз. buttonNames (орнына, жолдардың массиві деп есептейтін) функциясын пайдаланудың орнына, түймелер жиымын қолданыңыз және әр түймені сол үшін қосыңыз. Содан соң, сол жиым арқылы айналдырыңыз (бұл жерде жасағаныңыздай) орнату = әрқайсысында жалғанған.

Сондықтан әрбір сурет жолағын жасамас бұрын оларды сақтау үшін массивтерді жариялаңыз:

Dim MyPictureBoxes() as PictureBox

Содан кейін әрқайсысын жасаған кезде оларды алапқа қосыңыз. Сіз оларды жасағаннан кейін оларды келесідей ажыратуға болады:

For Each MyPictureBox In MyPictureBoxes
    Debug.Print(MyPictureBox.Name)
    MyPictureBox.enabled = False
Next

Бұны толығымен көрсету үшін екі түймешік, cmdGo және cmdDisable түрін жасадым:

Public Class Form1
    Dim MyPictureBoxes(4) As PictureBox

    Private Sub cmdGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGo.Click
        Dim personAvatar As New PictureBox
        Dim intX As Integer = 0

        While intX < 5
            personAvatar = New PictureBox
            With personAvatar
                .AutoSize = False
                .Left = intX * 100
                .Top = 100
                .Name = "cmd" & intX
                .Size = New System.Drawing.Size(100, 100)
                .TabStop = False
                .Text = ""
                .BorderStyle = BorderStyle.FixedSingle
                .BackgroundImageLayout = ImageLayout.Center
                .BackColor = Color.LightGray
                .BringToFront()
            End With

            Me.Controls.Add(personAvatar)
            MyPictureBoxes(intX) = personAvatar
            intX = intX + 1
        End While
    End Sub

    Private Sub cmdDisable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDisable.Click
        For Each MyPictureBox In MyPictureBoxes
            Debug.Print(MyPictureBox.Name)
            MyPictureBox.Enabled = False
        Next
    End Sub
End Class

MyPictureBoxes бүкіл нысан үшін қаншалықты ауқымды болғанына назар аударыңыз, сондықтан ол екі subs үшін де қол жетімді.

3
қосылды
Кодда мысал келтірейін бе?
қосылды автор StealthRT, көзі
Жаңарған OP сіз үшін :)
қосылды автор StealthRT, көзі
Мүмкін, қосымша ақпарат қосу керек болуы мүмкін. Мен оларды жасағаннан кейін оларды өшіре аламын. Олар жасағаннан кейін, пайдаланушы пішінде кез келген нәрсені жасай алады және егер олар пішін түймесіне соқса, ол қазірдің өзінде жасалған алаптағы сол түймелерді өшіреді.
қосылды автор StealthRT, көзі
Сондай-ақ, мен өзімнің ОП-ымды жаңарттым, көрсету үшін, оның ішкі батырмасын жасауды ұсынамын. Ол осы бөлімге қоңырау шалған кезде бір түймені жасайды. Мәселен, менің ойымша, бұл массивтің жасай аламын деп ойлаймын.
қосылды автор StealthRT, көзі
«Debug.Print (MyPictureBox.Name)» жолында келесі қатені аламын: Нысан сілтемесі нысанның данасына орнатылмаған.
қосылды автор StealthRT, көзі
Мен сіздің кодты көрсету үшін менің OP-ды жаңарттым. Менің кодымда қатені әлі де алыңыз.
қосылды автор StealthRT, көзі
иә, мен оны user user interface (14) ретінде PictureBox арқылы жасағанмын, ол 14 ол жасайды. Мен оны сыртындағы үстіңгі бөлігіне қойдым
қосылды автор StealthRT, көзі
Мен оны алдым. OP көрсету үшін жаңартылды. intX қанша болды және тек intXX дейін жеткенге дейін сақталды. :)
қосылды автор StealthRT, көзі
@StealthRT Сұрағыңызға түймелерді жасайтын кодты қосыңыз және бұл маған жауап беруге көмектеседі.
қосылды автор Brian Willis, көзі
@StealthRT Жауапты жаңартып берсеңіз, ол шын мәнінде менің соңында жұмыс істейтінін тексеру үшін маған екінші рет беріңіз.
қосылды автор Brian Willis, көзі
@StealthRT массивін тек қана емес, нысанның ауқымында болуы үшін жариялау. Мен сіздерге толық жауап беру үшін жауапты өзгерттім.
қосылды автор Brian Willis, көзі
@StealthRT Сурет жәшіктерін жасау үшін cmdGo түймешігін басып, оларды өшіру үшін cmdDisable басыңыз. Егер сіз cmdDisable пәрменін бассаңыз, ол жұмыс істемейді. Бұл шын мәнінде сіздің түсінігіңізге көмектесу үшін жай ғана жіберген кодтың үлкен бөлігі емес.
қосылды автор Brian Willis, көзі
@StealthRT Мен жақсы нәрсеге қарағанда көп зиян келтіретін не болып жатқанын түсінбей, көшіруге/өткізуге алаңдамаймын. UserAvatar-ды өзім жасағандай етіп жариялағанын тексеріп, жасаған барлық PictureBoxes-ді ұстап тұру үшін жеткілікті орын бар екеніне көз жеткізіңіз. Менің кодымның не істеп жатқанын түсінесің бе?
қосылды автор Brian Willis, көзі
@StealthRT Ішкі бөлімнің іске қосылғанда 0-ден 13-ге дейін IntX қадамы бар ма? Егер ол жоқ болса, бұл қате тудыратын userAvatar ішіндегі бос ұяшықтар болады. Менің кодымда 0-ден 4-ке дейін қалай өсетінін қараңыз. Сіздің кодыңыз ұқсас нәрсені істеу керек. Сіз сондай-ақ, B Pete-дің массивтің орнына Тізімді пайдалану туралы шешімін, әсіресе, PictureBoxes-дің санын үнемі өзгертулеріңізді сақтаған кезде қарастырғыңыз келуі мүмкін.
қосылды автор Brian Willis, көзі
+1 Бұл жақсы жұмыс істеуі керек. Мен тізімді тізбенің орнына пайдалануды қарастырамын: Dim MyPictureBoxes = жаңа тізім (Of PictureBox). Содан кейін, бастапқы плакаттың кодында жолды қосыңыз: MyPictureBox.Add (personAvatar) әрбір басқару элементін тізімге қосады. Басқару элементтеріне әлі жауапта көрсетілген For Each Loop көмегімен кіруге болады.
қосылды автор B Pete, көзі