ha en funktion för en knapp i en klass? (vb.net)

Permalänk
Medlem

ha en funktion för en knapp i en klass? (vb.net)

Private Sub btn_Next_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Next.Click

Såhär ser ju koden ut i en form i vb.net, men hur gör jag för att lägga koden i en klass?

Knappen deklareras i en modul:

Public btn_Next As New Button

Och skapas i en klass

btn_Next.Width = 96 btn_Next.Height = 30 btn_Next.Top = 200 btn_Next.Left = 0 System.Windows.Forms.Form.ActiveForm.Controls.Add(btn_Next)

Men hur får jag fram en funktion där jag kan lägga in koden för hur den skall bete sig när man klickar på den?

Permalänk
Medlem

Dubbelklicka på knappen i designläget, dvs om du använder något verktyg som har ett designläge.

Jag brukar alltid göra så för att slippa manuellt skriva in funktionen.

Permalänk
Medlem

men då hamnar den ju i formen, jag vill ha koden i en klass. och att kopiera koden rakt över går inte heller.

Permalänk
Medlem

Koden kommer hamna i en klass hur du än gör. Men jag tror jag vet vad du vill åstadkomma.

Frågan är om du inte kan importera klassen för formet och sen anropa händelsen.

Det jag brukar göra är att jag skapar en funktion i en annan klass som jag vill utföra. Sen anropar jag den funktionen i från "formet" eller i mitt fall från codebehindfilen. Detta kräver att man importerar klassen för metoden till codebehindfilen.

Hoppas du förstår vad jag menar :).

Permalänk
Medlem

....nej. Jag tror inte att det är det jag vill göra ,vill ju ha hela

Private Sub btn_Next_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Next.Click

Och all dess kod i en klass, ingen form.
Så när man trycker på knappen i programmet så kommer man direkt till klassen och inte till formen. Då jag skapar knappar efter hand i programmet så vill jag inte ha dom i form.

Men det funkar inte, står bara:

Handles clause requires a WithEvents variable.

När jag kopierar över

Private Sub btn_Next_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Next.Click

Permalänk
Medlem

nu kanske jag är ute och snurrar, men om du skapar din egen knapp, som en user control? alltså en *.ascx.
och i code-behind filen för ascx'en skapar du en funktion som körs när man klickar på knappen... (då ligger den ju inte på formuläret)

vet inte om det funkar, eller om jag fattade vad du var ute efter riktigt, jag ska prova lite sen när jag kommer till en dator med VS.

Visa signatur

Är det inte jag, så är det någon annan...
WGS84 Lat/Long: N 60º 23' 28.12" E 15º 40' 14.24"
RT90: X=6697030, Y=1492584

Permalänk
Medlem

Garnet: Nu kan jag inte så mycket om "ascx" & "code-behind", men det jag vill göra är att i programmet skapa en knapp (alltså inte sätta ut den i designläget).
När man sedan trycker på knappen man skapat i programmet så skall nånting hända, tex en msgbox skall komma fram eller nått. Grejen är att jag vill ha koden för händelsen i knappen liggandes i en klass. Mycket klarare än så kan jag nog inte göra det

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av polygon5
När man sedan trycker på knappen man skapat i programmet så skall nånting hända, tex en msgbox skall komma fram eller nått.

kanske kan du i händelsen för knappen på formen göra ett anrop till en sedan tidigare skriven funktion som ligger i en annan klass, typ

Private Sub btn_Next_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Next.Click dim myClass as classWithFunctions myClass = new classWithFunctions myClass.doThisWhenButtonPress() end sub

har jag fattat det rätt nu kanske

Visa signatur

Är det inte jag, så är det någon annan...
WGS84 Lat/Long: N 60º 23' 28.12" E 15º 40' 14.24"
RT90: X=6697030, Y=1492584

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av polygon5
....nej. Jag tror inte att det är det jag vill göra ,vill ju ha hela

Private Sub btn_Next_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Next.Click

Och all dess kod i en klass, ingen form.
Så när man trycker på knappen i programmet så kommer man direkt till klassen och inte till formen. Då jag skapar knappar efter hand i programmet så vill jag inte ha dom i form.

Men det funkar inte, står bara:

Handles clause requires a WithEvents variable.

När jag kopierar över

Private Sub btn_Next_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Next.Click

För att btn_Next ska få "trigga" händelser (som t ex knapptryckning) måste den vara deklarerad som WithEvents variabel.

Friend WithEvents btn_Next As System.Windows.Forms.Button

Förstår inte exakt vad du är ute efter men hoppas det hjälper något

Permalänk
Medlem

halk: La till

Friend WithEvents btn_Next As System.Windows.Forms.Button

I en modul, men får fortfarande samma felmeddelande:

Handles clause requires a WithEvents variable.

Men eftersom jag tydligen förklarar illa så får jag väl försöka igen:
När jag startar programmet så skall denhär koden laddas:

btn_Next.Width = 96 btn_Next.Height = 30 btn_Next.Top = 200 btn_Next.Left = 0 System.Windows.Forms.Form.ActiveForm.Controls.Add(btn_Next)

Den koden ligger i en klass.

Knappen deklareras i en modul:

Public btn_Next As New Button

Så när funktionen i klassen laddas, så skapas knappen.
MEN! När jag trycker på den så händer ju ingenting, för det finns ju ingen kod för det. Jag vill ha koden för vad som skall hända i knappen i en klass.

Private Sub btn_Next_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Next.Click end sub

Sådär ser koden ut om man skall klicka på den. Men det funkar inte när man lägger den i en klass.
Så.... Hur gör jag för att man skall kunna trycka på den i körbart läge, men slippa ha koden i form1, utan istället ha den i en klass.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av polygon5
Så.... Hur gör jag för att man skall kunna trycka på den i körbart läge, men slippa ha koden i form1, utan istället ha den i en klass.

Citat:

Ursprungligen inskrivet av Garnet
kanske kan du i händelsen för knappen på formen göra ett anrop till en sedan tidigare skriven funktion som ligger i en annan klass, typ

Private Sub btn_Next_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Next.Click dim myClass as classWithFunctions myClass = new classWithFunctions myClass.doThisWhenButtonPress() end sub

Jag känner inte till att man kan göra som du vill, att ha "precis all" kod för knappen i en annan klass. mitt exempel flyttar iaf koden som ska _utföras_ till en annan klass, Click-händelsen ligger dock kvar på form1

Visa signatur

Är det inte jag, så är det någon annan...
WGS84 Lat/Long: N 60º 23' 28.12" E 15º 40' 14.24"
RT90: X=6697030, Y=1492584

Permalänk
Medlem

Garnet: Det var ju synd. Det närmaste man kan komma är väl ditt system. Tack för hjälpen

Edit: Nu verkar ju inte ens ditt sätt fungera. Har som sagt deklarerat knappen i en modul, och koden för hur den ser ut och var den ligger finns i en klass. Men när jag trycker på den fungerar den ändå inte.

Private Sub btn_Next_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Next.Click

Ligger numera i form1, så det borde väl rimligtvis inte vara några problem? Måste man skriva till nått extra?

Permalänk
Medlem

AddHandler btn_Next.Click, New EventHandler(AddressOf btn_Next_Click)

borde fungera

Visa signatur

a3gz0r:
"haru haxxa cfg någe för d e fett me options i den såg ja då ja haxxa den för ja int byta efter brorsan spela.. fann typ allt då där e nog svare.... men du ja sejer d.. d e MKT!! saker där ja fatta inte allt men nån kanske kan?!!? ja fick hjelp här me min förut..."

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av The-Copy

AddHandler btn_Next.Click, New EventHandler(AddressOf btn_Next_Click)

borde fungera

Nu gör jag väl bort mig igen, men var lägger jag denna kod? försökt få in den när jag deklarerar, och i suben, men det funkar inte.. förklara?
Tack för svaren förresten.

Permalänk
Medlem

Vid

btn_Next.Width = 96 btn_Next.Height = 30 btn_Next.Top = 200 btn_Next.Left = 0 System.Windows.Forms.Form.ActiveForm.Controls.Add(btn_Next)

Efter det.

Visa signatur

a3gz0r:
"haru haxxa cfg någe för d e fett me options i den såg ja då ja haxxa den för ja int byta efter brorsan spela.. fann typ allt då där e nog svare.... men du ja sejer d.. d e MKT!! saker där ja fatta inte allt men nån kanske kan?!!? ja fick hjelp här me min förut..."

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av The-Copy
Vid

btn_Next.Width = 96 btn_Next.Height = 30 btn_Next.Top = 200 btn_Next.Left = 0 System.Windows.Forms.Form.ActiveForm.Controls.Add(btn_Next)

Efter det.

Funkar fint tills man kommer till "AddressOf". Där står det sedan:

Name 'btn_Next_Click' is not declared.

Jag ändrade sedan till punkt istället för markstreck, men då blev det:

'AddressOf' operand must be the name of a method; no parentheses are needed.

Damn this godt damned program.

Permalänk
Medlem

Du måste skapa en sub som heter btn_Next_Click som innehåller koden för knapptryckningen

Visa signatur

a3gz0r:
"haru haxxa cfg någe för d e fett me options i den såg ja då ja haxxa den för ja int byta efter brorsan spela.. fann typ allt då där e nog svare.... men du ja sejer d.. d e MKT!! saker där ja fatta inte allt men nån kanske kan?!!? ja fick hjelp här me min förut..."

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av The-Copy
Du måste skapa en sub som heter btn_Next_Click som innehåller koden för knapptryckningen

Men det har jag ju..

Permalänk
Medlem

Private Sub Form_Load(e as .... btn_Next.Width = 96 btn_Next.Height = 30 btn_Next.Top = 200 btn_Next.Left = 0 System.Windows.Forms.Form.ActiveForm.Controls.Add(btn_Next) AddHandler btn_Next.Click, New EventHandler(AddressOf AbcAbc) End Sub Private Sub AbcAbc() Messagebox.Show("Hej knapptryck") End sub

EDIT. FEL
Detta funkar för mej:

Private btn_Next(50) As Button Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load btn_Next(0) = New Button btn_Next(0).Width = 96 btn_Next(0).Height = 30 btn_Next(0).Top = 200 btn_Next(0).Left = 0 btn_Next(0).Parent = Me AddHandler btn_Next(0).Click, New EventHandler(AddressOf knappTryck) End Sub Private Sub knappTryck(ByVal sender As Object, ByVal e As EventArgs) MessageBox.Show("Knapp") End Sub

Visa signatur

a3gz0r:
"haru haxxa cfg någe för d e fett me options i den såg ja då ja haxxa den för ja int byta efter brorsan spela.. fann typ allt då där e nog svare.... men du ja sejer d.. d e MKT!! saker där ja fatta inte allt men nån kanske kan?!!? ja fick hjelp här me min förut..."

Permalänk
Medlem

tack så mycket