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


-hmm?!..

Postades av 2000-10-12 17:28:00 - Hans Kylberg, i forum visual basic - allmänt, Tråden har 2 Kommentarer och lästs av 1384 personer


Jag har en form med massor av boxar, knappar mm. Dessutom har jag en klass som är en variant på Collection, konstruerad enligt beskrivning för detta i MSDN Library. En sådan "SCollection" befolkas med ett tjugotal objekt, instanser av en klass där en av instansvariablerna är en Array med plats för 32 strängar (i de flesta fall används endast den första).
I en sub som går igång vid Form.load sätts värden på de flesta av b
oxarna och knapparna, värden som hämtas från Arrayerna i de här objekten i nämnda SCollection.
När, och om, värdet i en viss checkbox sätts till = 1, så ändras samtidigt en sträng (den första) i Arrayen i ett av de andra objekten, som inte är berört av frågan om den aktuella checkboxens värde, till "0" (noll, inte stora O), ett värde som förekommer i åtminstone något annat objekt av samma klass. Om jag lägger checkboxändringen i en separat sub, men kallar på den från samma ställe där den låg, inträffar samma sak, men om jag flyttar den kallande raden till en annan position så inträffar inte den mystiska ändringen (frågan är vad som i ett visst läge kan ändras istället, utan att jag råkar märka det !?).
Jag har haft en annan liknande ändring i samband med en annan Checkbox, som jag kringgick på annat sätt.

Hur kan detta komma sig????


En sak som jag kommer att tänka på när jag skriver detta, är VB's förhållande till Sant/falskt och 1/0. Jag gick på pumpen när jag trodde att Boolean är en egen typ skild från Integer, så att jag kan testa på om en variant variabel har ett numeriskt värde, inklusive 0, eller om det är (i det här fallet) Falskt. Var värdet 0 så gav testen om det var = Falskt, resultatet Sant.
Varför anger VB värdet på Checkbox.value som 1 eller 0, men samtidigt
Radiobutton.value som Sant eller Falskt??? Kan man använda Boolean på Checkbox också?

-Hans


Svara

Sv: -hmm?!..

Postades av 2000-10-13 01:11:00 - Mattias Sjögren

Hängde tyvärr inte med alls i den första halvan av frågan. Tror det skulle hjälpa med några rader kod....

>En sak som jag kommer att tänka på när jag skriver detta, är VB's förhållande till Sant/falskt och 1/0.

När du går från något numeriskt värde till Boolean så är 0 falskt, allt annat sant. När du går åt andra hållet ger falskt 0, och sant -1.


>Varför anger VB värdet på Checkbox.value som 1 eller 0, men samtidigt Radiobutton.value som Sant eller Falskt???

Därför att en Checkbox kan ha tre lägen; 0 (vbUnchecked), 1 (vbChecked) och 2 (vbGrayed). Alltså kan inte Boolean användas, som bara kan hålla två olika lägen. För en OptionButton räcker det dock bra.



> Kan man använda Boolean på Checkbox också?

Du kan skriva

Check1.Value = Abs(DinBooleanVariabel)

eftersom Abs(True) = Abs(-1) = 1 och Abs(False) = Abs(0) = 0


~ beezo


Svara

Sv: -hmm?!..

Postades av 2000-10-13 13:25:00 - Hans Kylberg

Tack Beezo för att du svarar på mina frågor! Jag är nybörjare på VB, med har Smalltalk-bakgrund, så därför är kanske inte min vokabulär helt VB-mässig.

"Några rader kod" är väl inte så enkelt att välja ut här, det hela uppstår i ett sammansatt sammanhang. Själva stället där det händer ser ut såhär:

If cmdObject("hopsah").Name <> "" Then
CHK_HOPSAH.value = 1
Else: CHK_HOPSAH.value = 0
End If

Det är när raden CHK_HOPSAH.value = 1 körs som det händer.
Objektet det händer i är av samma klass som objektet man får med cmdObject("hopsah"), men det är inte samma objekt. Klassens instansvariabler och initiering ser ut såhär:

Option Explicit
Private m_cName As String
Private m_args() As String
Private m_side As String
Private m_nargs As Integer
Private m_storeKey As String

Private Sub Class_Initialize()
ReDim m_args(1 To 32)
m_nargs = 0
m_cName = ""
m_side = ""
End Sub

Det värde som oavsiktigt ändras ligger i m_args(1) i ett av objekten, de övriga platserna i m_args i det objektet är oanvända, men VB sätter dom ju till tomsträngar.

Det förekommer ca 20 sådana objekt, alla lagrade i samma Collection, indexerade med varsin sträng (som också återfinns i m_storeKey). Denna Collection ligger i sin tur i ett objekt tillhörande en hemgjord klass SCollection:

Option Explicit
Private m_collection As Collection
Private m_position As Integer
Private m_sortMode As Integer
Private m_keyTemp

Private Sub Class_Initialize()
Set m_collection = New Collection
End Sub

Public Function NewEnum() As IUnknown
' OBS I tools-procedure attributes har markerats "hide" och ID satt till -4
Set NewEnum = m_collection.[_NewEnum]
End Function

(I båda de här nämnda klasserna finns förstås också en massa funktioner mm)

När cmdObject("hopsah") körs händer i detta fall att ett objekt lagrat med index "hopsa" tas bort ur samlingen och försvinner, och istället skapas två stycken nya som lagras med respektive index "hopsah" och "hopsav". Båda tilldelas namnet "hopsa", så cmdObject("hopsah").Name <> "" blir sant.
I detta skede händer ännu ingenting med objektet som ändras, det sker först i nästa steg: CHK_HOPSAH.value = 1. Vad som däremot kan ha betydelse är att det ursprunliga objektet "hopsa" ligger före (men inte närmast före) det objekt som störs, i samlingen ("collectionen"). Det betyder att alla efterföljande så att säga byter plats ett steg mot början. Objektet efter det störda har värdet "0" i sin m_arg(1), samma värde som "hoppar" in och sätter sig i det störda objektet. Men det finns ett par andra med detta värde också. Inga andra objekt ändras. Och om jag flyttar anropet till rutinen som utlöser felet, så händer heller inget fel. (Jag har inte provat alla upptänkliga varianter här, men några).

Hoppas att det är lite begripligare såhär!

- Hans


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

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 569 615
27 953
271 709
5 716
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