webForumDet fria alternativet

Funktionsproblem

18 svar · 615 visningar · startad av asp

aspMedlem sedan aug. 2002733 inlägg
#1

Jag vill byta ut 1:an mot i.

    Function funk(ByVal i)
        PictureBox[red][b]1[/b][/red].BackgroundImage = Image.FromFile("C:\Documents and Settings\Administrator\Desktop\Projektarbete\green.jpg"))
    End Function
PMedlem sedan jan. 20012 204 inlägg
#2

Det är nog inte möjligt. Du får nog göra ngt i stil med:

List<PictureBox> allaboxar = new List<Picturebox>();
;lägg in dinna värden i lista...
Function funk(ByVal i)
        allaboxar[i].BackgroundImage = Image.FromFile("C:\Documents and Settings\Administrator\Desktop\Projektarbete\green.jpg"))
    End Function
aspMedlem sedan aug. 2002733 inlägg
#3

;lägg in dinna värden i lista...

Den raden fattar jag inte... är nybörjare, vad exakt skall jag göra? :)

emissionMedlem sedan dec. 19996 721 inlägg
#4

Beskriv gärna lite utförligare, med mer kod, vad som ska åstadkommas. Jag tror att vi kan komma på en bättre lösning.

cokMedlem sedan dec. 2005664 inlägg
#5

I .NET 2.0 finns det ju en metod:

this.Controls.Find("kontrollnamn", boolean)

Om du kör med 2.0 så borde detta gå att skriva om till vb.net.

aspMedlem sedan aug. 2002733 inlägg
#6

Jag har 400 bilder i mitt program. De alla heter PictureBox1 t.o.m. PictureBox 400. När man klickar på varje bild så vill jag att denna bild skall bli en ring eller ett kryss beroende på vems tur det är.

Helt enkelt ett luffarschackspel.

cokMedlem sedan dec. 2005664 inlägg
#7

skapa då en metod som du kallar på från respektive picturebox vid metoden OnClick. Alltså i OnClick kallar du på din nya metod som tar med sig ett objekt, detta objekt ska då vara din picturebox som du sedan castar från objekt till picturebox och där byter du sedan bild.

Har ingen utvecklingsmiljö framför mig men i stil med:

picturebox_onclick(object sender, Eventargs e)
{
nyMetod(sender);
}
void nyMetod(object sender)
{
((PictureBox)sender).BackgroundImage = Image.FromFile("C:\Documents and Settings\Administrator\Desktop\Projektarbete\green.jpg"));
}

Antagligen lite felkodat och mer c# än det du vill ha men nått i den stilen kan du göra.

aspMedlem sedan aug. 2002733 inlägg
#8
    Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
        Dim bild = PictureBox1.BackgroundImage
        [b][red]If bild = "C:\Documents and Settings\Administrator\Desktop\Projektarbete\tom.jpg" Then[/red][/b]
            If tur = 1 Then
                PictureBox1.BackgroundImage = Image.FromFile("C:\Documents and Settings\Administrator\Desktop\Projektarbete\green.jpg")
                tur = 0
            Else
                PictureBox1.BackgroundImage = Image.FromFile("C:\Documents and Settings\Administrator\Desktop\Projektarbete\red.jpg")
                tur = 1
            End If
        End If
    End Sub

När jag startar programmet är det inget fel. Men när jag klickar på PictureBox1 så markerar den fel på raden som är fetstilad. Det står att något om Bitmap... :(

aspMedlem sedan aug. 2002733 inlägg
#9

Hej igen.

Undrar om det är någon som kan komma med ett konkret svar på hur jag löser detta problem.

Jag har 400 pictureboxar, de är i ett rutsystem 20x20 rutor och heter därmed X1Y1... till X20Y1.... sedan X1Y2.... till X20Y2.... o.s.v.

Nu vill jag att när man klickar på en picturebox så körs följande funktion. Det skriver jag med hjälp av:

    Private Sub X1Y1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles X1Y1.Click
        funk(1,1)
    End Sub

Men nu kommer problemet, funktionen. Hur gör jag för att just ändra bakgrundsbilden på PictureBox:en med namnet X1Y1?

Ungefär så här:

    Function funk(ByVal x, ByVal y)
        [b]X[/b] + x + [b]Y[/b] + y +[b].BackgroundImage = Image.FromFile("green.jpg")[/b]
    End Function
cokMedlem sedan dec. 2005664 inlägg
#10

Varför gör du inte som jag beskrev ovan (att skicka med pictureboxen som ett object).

Du kan använda FindControl() som returnerar en Control som du sedan får kasta till en PictureBox.

Käns lite onödigt att skapa en metod för respektive picturebox's Click. Hänvisa alla Click till samma metod och ta i den ut vilken picturebox det är. på detta sätt blir det lättare att ändra i koden efterhand.

aspMedlem sedan aug. 2002733 inlägg
#11

Okej. Det låter jättebra bra, men eftersom jag är nybörjare vet jag inte riktigt hur koden skulle se ut. =/

mozillaMedlem sedan juli 20011 084 inlägg
#12

cok har redan givit ett bra exempel på hur koden skall se ut längre upp.

picturebox_onclick(object sender, EventArgs e) {
   ((PictureBox)sender).BackgroundImage = Image.FromFile("green.jpg"));
}

bör fungerar ypperligt och sedan kopplar du alla knappar till samma OnClick funktion.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#13

Om du skapar felra picturebox och ger de samma "name" så bör det gå att komma åt dem via:

    Function funk(ByVal i)
        ' Alla boxarna har name satt till boxes.
        Boxes(i).BackgroundImage = Image.FromFile("C:\Documents and Settings\Administrator\Desktop\Projektarbete\green.jpg"))
    End Function

Denna metod funkade iaf under VB 3.0 för ett antal år sedan, och bör säkert funka även nu.

emissionMedlem sedan dec. 19996 721 inlägg
#14

nitro2k01 skrev:

Om du skapar felra picturebox och ger de samma "name" så bör det gå att komma åt dem via:

    Function funk(ByVal i)
        ' Alla boxarna har name satt till boxes.
        Boxes(i).BackgroundImage = Image.FromFile("C:\Documents and Settings\Administrator\Desktop\Projektarbete\green.jpg"))
    End Function

Denna metod funkade iaf under VB 3.0 för ett antal år sedan, och bör säkert funka även nu.

Det gör den inte, men principen är ändå relevant.

asp, skapa och lägg in alla bilderna i en tvådimensionell array (20,20), så kan du hitta dem enkelt. Det blir dessutom den klart effektivaste koden.

aspMedlem sedan aug. 2002733 inlägg
#15

mozilla: "bör fungerar ypperligt och sedan kopplar du alla knappar till samma OnClick funktion."

Hur gör jag det? :(

Vill också tacka alla som svarat o hjälpt mig.

mozillaMedlem sedan juli 20011 084 inlägg
#16

okej, nu vet jag inte exakt, för jag har inte visual studio(?) framför mig. Men någonstans måste du ju ange vilken funktion som skall köras när man klickar på knappen. Istället för att länka den till PictureBox1_Click, PictureBox2_Click osv så länkar du alla till PictureBox_Click. Och låter alla PictureBoxar ha ett unikt ID.

Det kan dock vara möjligt att det är som emission säger. Men då får han förevisa exempel :) , och gärna en förklaring till varför det skulle vara mer effektivt :stud

aspMedlem sedan aug. 2002733 inlägg
#17

mozilla >> Jag förstår din princip. Nu heter PictureBox:arna X1Y1, istället för PictureBox1. Då får man ändra denna kod lite, eller?

picturebox_onclick(object sender, EventArgs e) {
   ((PictureBox)sender).BackgroundImage = Image.FromFile("green.jpg"));
}

Någon annan som vet vart man skall ändra detta i Visual Studio?

mozillaMedlem sedan juli 20011 084 inlägg
#18

Knapparna kan fortfarande heta X1Y1, X2Y2 etc. Och koden behöver inte förändras för det. Du skickar med namnet, ja faktiskt hela objektet som klickat på knappen i "sender". Och vet på så sätt vilken knapp som blivit nertryckt. Du behöver bara koppla "OnClick" till samma funktion för varje knapp.

aspMedlem sedan aug. 2002733 inlägg
#19

Ja, men måste jag då gå in i varje knapp och göra detta?

Koden, i VB.NET ser väl den lite annorlunda ut?

134 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)