Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Anropa en public sub

Postades av 2009-07-19 23:16:38 - Robert Nielsen, i forum vb.net, Tråden har 13 Kommentarer och lästs av 1255 personer

EDIT: Omförmulerar mig.

Hej


Hur anropar man en public sub som ligger i en form som öppnas genom:

Dim myOrder_Workorder As New _OrderWorkorder
myOrder_Workorder.Show()

(Gör att man kan öppna flera fönster med samma form)

Hittar inget på nätet om det. (troligtvis fel sökfraser)

Nån som kan ge lite tips på sökfraser eller några tips på hur man gör


Svara

Sv: Anropa en public sub

Postades av 2009-07-21 08:55:00 - Per Hultqvist

Om formuläret _OrderWorkorder har en publik metod som heter DoSomething så kan du anropa den med:

myOrder_WorkOrder.DoSomething()


Svara

Sv:Anropa en public sub

Postades av 2009-07-21 10:36:37 - Robert Nielsen

Så trodde jag att man skulle göra men det vill inte fungera.
Men jag får ett medelande om att myOrder_WorkOrder inte är deklarerad.

Jag deklarerar ju den när jag ska öppna formen:
Dim myOrder_Workorder As New _OrderWorkorder
myOrder_Workorder.Show()

den kodsnutten körs när man klickar på en knapp.

Hur ska man annars deklarera den. Kan tänkamig att det är där felet ligger.


Jag vill ju kunna ha flera likadana fönster öppna samtidigt. det är ju det som ställer till det för mig


Svara

Sv: Anropa en public sub

Postades av 2009-07-21 16:27:21 - Oskar Johansson

Visa mer kod, visa hur koden ser ut i verkligheten. Gissningsvis är du i fel scope och härjar


Svara

Sv:Anropa en public sub

Postades av 2009-07-21 18:17:21 - Robert Nielsen

Jag har en sida som heter _Main där man väljer vad man vill göra, t.ex skapa en ny order. Då öppnar man en ny order genom en knapp. Då körs följande kod:

Dim myOrder_Workorder As New _OrderWorkorder
myOrder_Workorder.Show()


Där fyller man div uppgifter. När man lägger till en artikel och ska fylla i artnr kan man välja att söka efter en artikel. Man klickar på en knapp och denna kod körs:

SokArtikel_Order.Show()


När man väl har hittat artiklen man vill ha i sökfönstret klickar man på "lägg till" och artikel numret ska hamna i fältet för artikelnummer i fönstret "myOrder_Workorder"

Då försökte jag att lösa det så här.
Jag skapar en sub i "_OrderWorkorder"

Public Sub Hamta_sökord()
text_Artikelnummer.Text = SokArtikel_Order.label_ValtArtnr.Text
End Sub


Jag kallar på subben från sökfönstret när jag klickar på "lägg till"

_OrderWorkorder.Hamta_sokord()


Det skulle kanske vara "myOrder_Workorder" istället för "_OrderWorkorder" men då får jag fel att den inte är deklarerad.


Om jag öppnar orderfönstret med "_OrderWorkorder.show" istället så fungerar det.
Men så vill jag inte ha det. man måste kunna ha flera aktiva ordrar uppe samtidigt.


Hoppas du blir lite klokar på hur jag menar.






Förresten vad menar du med scope?


Svara

Sv: Anropa en public sub

Postades av 2009-07-21 19:55:27 - Oskar Johansson

> Förresten vad menar du med scope?

En variabel är bara giltig inom sitt scope. Nu är det lite knöligare att förklara i vb.net, men i c# kan man på ett ungefär säga att varje { och } är ett nytt scope. Om jag deklararerar någonting innanför ett par { och } så är det jag deklarerar bara giltigt sålänge jag fortfarande befinner mig innanför nyss nämnda { och }. Så fort jag hamnar utanför (t.ex. för att jag skriver en } ) så är det jag deklarerat inte giltigt längre.

Exempel i vb.net: (med reservation för syntaxfel)

public sub anka()
  dim foo as string
  foo = "kaka" 'Går alltid bra, foo är ju redan deklarerad
  bar = "kaka" 'Ogiltigt, bar är inte deklarerad än, och dessutom i fel scope
  while true
    foo = "kaka"
    bar = "kaka" 'Ogiltigt, bar är inte deklarerad än
    dim bar as string
    foo = "kaka"
    bar = "kaka" 'Går bra
  loop
  foo = "kaka"
  bar = "kaka" 'Ogiltigt, bar är visserligen deklarerad, men vi befinner oss i fel scope
end sub

public sub fisk()
  foo = "kaka" 'Ogiltigt, är ju i helt fel scope. foo är deklarerad i en annan funktion, men det vet jag ingenting om
  bar = "kaka" 'Ogiltigt, är ju i helt fel scope. bar är deklarerad i en annan funktion, men det vet jag ingenting om
end sub


Vad du troligtvis försöker gör är att deklarera din variabel myOrder_Workorder i en funktion för att sedan försöka använda den i en annan. Det är två helt skilda scope. Du måste hitta på en annan lösning, den ena funktionen kan omöjligt veta någonting om variabler i den andra funktionen.

Förslagsvis kan du skapa en Lista eller liknande som du deklarerar i klassen (_inte_ i någon funktion) som du sedan fyller på i samband med att du skapar nya instanser av klassen _OrderWorkorder. Den listan kan du sedan komma åt ifrån din andra funktion. På så sätt kan du skapa "oändligt" många instanser av den klassen. Hur du sedan väljer vilken utav dem du vill exekvera din funktion på är dock ett annat problem.


Svara

Sv:Anropa en public sub

Postades av 2009-07-21 21:27:06 - Robert Nielsen

Ok tack då förstår jag lite mer.

Men hur menar du med att skapa en lista? Kan man då skapa flera instanser av samma form med ett unikt namn som man kan kalla på


Om man ändrar namnet när man skapar en ny "myOrder_Workorder" till ett unikt namn då blir det väll samma sak som tidigare. Man kan inte kalla på det unika fönstret från ett annat scope.

Vet du någon webbsida där man kan läsa på lite om hur man hanterar dessa instanser?


Svara

Sv: Anropa en public sub

Postades av 2009-07-21 22:56:18 - Oskar Johansson

Du kan t.ex. skapa en array (dock lite omständigt då du inte på förhand vet hur många fönster du vill öppna), eller använda en lista/dictionary. Titta på klasserna System.Collections.Generic.List resp. Dictionary.


Svara

Sv:Anropa en public sub

Postades av 2009-07-22 16:39:03 - Robert Nielsen

Tack för hjälpen.

Verkar som att det går att lösa genom en array. (det lilla jag hunnit testa)


Jag löste det så här:

Dim myOrderWorkorder(2) As _OrderWorkorder
i formen _Main


När jag öppanar ett nytt fönster:

myOrderWorkorder(0) = New _OrderWorkorder
myOrderWorkorder(0).Show()

Vill jag ändra något i formen

myOrderWorkorder(0).text_artikelnr.text = SokArtikel_Order.label_ValtArtikelnr.text



Jag tror nog att det ska funka nu.
Men vad händer om fler antal i arrayen än jag kommer att behöva? ex Dim myOrderWorkorder(100) As _OrderWorkorder


Tack än en gång


Svara

Sv: Anropa en public sub

Postades av 2009-07-22 20:08:31 - Oskar Johansson

Som sagt, eftersom att en array kräver att du vet hur många element du behöver ifrån början så.. Titta på list resp. dictionary


Svara

Sv: Anropa en public sub

Postades av 2009-07-22 22:27:32 - Andreas Hillqvist

Här är ett exempel:

Public Class Form1

    'Deklarerar en klassnivå variabel, 
    'tillgänglig för alla procedurer i klassen
    Private ReadOnly children As New System.Collections.Generic.List(Of Form2)

    'Funktion för att skapa ett nytt fönster
    Private Function NewForm() As Form2
        'Deklarerar en lokal variabel och skapar en instans av ett nytt fönster, 
        'tillgänglig bara inom funktionen NewForm()
        Dim f As New Form2()

        'Sätter huvudfönstret som ägare,
        'Innebär att fönstrena kommer ligga över huvudfönstret samt att om om huvudfönstret stängs 
        'stängs även barnfönstren
        f.Owner = Me

        'Lägger till fönsterinstansen i samlingen children
        children.Add(f)

        'Lägger till en event handler vilket gör att objektet tas bort från samlingen när det stängs
        AddHandler f.FormClosed, AddressOf RemoveFormOnClose

        'Visar fönstret
        f.Show()

        'Retunerar fönstret
        Return f
    End Function

    Private Sub RemoveFormOnClose(ByVal sender As System.Object, ByVal e As System.EventArgs)
        'Tar bort objektet från listan
        children.Remove(sender)

        'Tar bort event handler 
        RemoveHandler ctype(sender, Form2).FormClosing, AddressOf RemoveFormOnClose
    End Sub

    



    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Skapar ett nytt tomt fönster
        NewForm()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        'Skapar ett nytt tomt fönster
        Dim f As Form2 = NewForm()

        'Anropar en metod på det nyss skapadet fönstret.
        f.Focus()
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        'Kontrolerar om det finns några öppna fönster
        If children.Count > 0 Then
            'Anropar en metod på det nyss skapadet fönstret.
            children(0).BringToFront()
        End If
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        'Deklarerar en lokal variabel 
        Dim f As Form2

        'Går igenom alla barnfänster
        For Each f In children
            'Anropar en metod på det nyss skapadet fönstret.
            f.Focus()
        Next
    End Sub
End Class


Svara

Sv:Anropa en public sub

Postades av 2009-07-23 13:54:28 - Robert Nielsen

Jag tycker det sista förslaget verkar invecklat. Jag kör nu med en array och jag har fått funktionerna jag sökte och det fungerar.


Men är det någon fara att deklarera så här: "Dim myOrderWorkorder(10000) As _OrderWorkorder"

Jag kan ju då skapa upp till 10000 nya fönster, men käkar det mycket minne eller processorkraft.?


Svara

Sv: Anropa en public sub

Postades av 2009-07-23 14:04:18 - Oskar Johansson

Ditt förslag är mer invecklat, och käkar mer minne, än att köra med list eller dictionary.


Svara

Sv:Anropa en public sub

Postades av 2009-07-24 21:46:32 - Robert Nielsen

Jag tackar och bockar för all vänlig hjälp. Får se om jag får till det med list eller dictionary.
Annars får jag anse detta som löst.
Tack och bock


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 668
27 958
271 741
641
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies