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


Me i klasser

Postades av 2001-10-28 16:09:00 - Frans Englich, i forum visual basic - allmänt, Tråden har 23 Kommentarer och lästs av 538 personer

Jag skrev ett inlägg om detta problemet för ett par dagar sedan men fick inget vettigt svar. Jag har funderat mycket på det och försökt hitta någon logisk förklaring men har inte lyckats.
Så här ligger det till:
Jag använder Me i en klass för att komma åt klassens privata och publika egenskaper och metoder. Dvs jag använder Me i klassen(Me syftar på själva klassen). Detta funkar alldeles utmärkt.

I en annan klass använder jag Me; jag skriver Me. och får upp en lista över metoder och egenskaper som klassen har. Jag väljer en egenskap och skriver in ett värde. T.ex me.CurrentMonth = 4. När jag sedan kör programmet får jag errorn "Method or data member not found"och markerar CurrentMonth. Notera att jag fick upp CurrentMonth i listan när jag skrev me. .

Det verkar som att ett with statement påverkar vad me pekar på men jag har inget with statement i gällande sub, jag har faktiskt inte en enda i hela klassen.

Kan någon berätta vad som pågår?

mvh Frans


Svara

Sv: Me i klasser

Postades av 2001-10-28 20:51:00 - Johan Djupmarker

Jag har inte pysslat så mycker med klasser i VB, men borde det inte räcka att skriva: CurrentMonth = 4 ? (Så gör man i c++ iaf och jag är för lat för att testa...;) )

/Johan


Svara

Sv: Me i klasser

Postades av 2001-10-28 21:04:00 - Frans Englich

jo, det funkar. Men jag vill kunna använda me i och med att det förklarar bättre vad man gör; inga missförstånd. Dessutom är det bra och veta varför det är på detta och viset, om det bara gäller me osv.

mvh Frans


Svara

Sv: Me i klasser

Postades av 2001-10-28 22:13:00 - Frans Englich

Okej, jag har hittat ett mönster: Om jag testar me.egenskap i t.ex. en if-sats så funkar det. Men om jag prövar att ge t.ex. me.egenskap ett värde så går det inte; "Method or data member not found".


+---------------------------------+
| LÅTER INTE DETTA SJUKT?! |
+---------------------------------+


Svara

Sv: Me i klasser

Postades av 2001-10-29 05:49:00 - Peter Holm

Ännu en anledning att inte använda property let/get och set.

[peter.h]


Svara

Sv: Me i klasser

Postades av 2001-10-29 11:55:00 - Frans Englich

Huh.. Det får du allt förklara lite djupare. Jag vill ha egenskaper i klassen, hur har jag det utan let/get? Varför är det dåligt med Let/Get?

(äntligen någon som yttrar sig om detta problem)

mvh Frans


Svara

Sv: Me i klasser

Postades av 2001-10-29 13:14:00 - Patrik Löwendahl

Men nu får ni ju ge er ..

problemet har ingenting med let/get att göra ... utan är en bugg ...


Svara

Sv: Me i klasser

Postades av 2001-10-29 13:18:00 - Patrik Löwendahl

gjorde följande test:

<code>
Option Explicit
Dim m_iTest As Integer

Public Property Get test() As Integer
test = m_iTest
End Property

Public Property Let test(value As Integer)
m_iTest = value

End Property

Public Sub go()
Me.test = 5

If Me.test = 5 Then MsgBox "hallå"
End Sub
</code>

funkade hur bra som helst ... måste vara något i din interface deklaration som inte vill ...

Hur ser din klass ut ?? Vad har du för nivå på felhanteringen ?? break on all errors / break in class el. break on unhandled ???

vad gör du i din property ??


Svara

Sv: Me i klasser

Postades av 2001-10-29 14:30:00 - Peter Holm

Jajaj Patrik.... Jag bara hakade på. Jag läste texten....

Kommer i alla fall inte använde dem förräns jag blir nödgad att göra det.


Jag menar vaffö finns inte property get/let/set i C/C++ ????

[peter.h]


Svara

Sv: Me i klasser

Postades av 2001-10-29 15:18:00 - Frans Englich

Jag gör inget speciellt i min egenskap, bara returnerar eller ändrar en variabel. Vad jag har för nivå på felhantering verkar var irrelevant i och med att jag får errorn när koden körs, om jag inte kör ctrl+F5. Det bästa vore om någon kunde köra mitt projekt på sin dator och se om det uppför sig p samma vis... Om någon har lust att lägga ner så mycket tid.

mvh Frans


Svara

Sv: Me i klasser

Postades av 2001-10-29 15:24:00 - Mikael Wedham

I IDL definieras även metoder som propput och propget funktioner. Vad vill du ha sagt?


Svara

Sv: Me i klasser

Postades av 2001-10-29 16:01:00 - Patrik Löwendahl

nä den exakta syntaxen finns inte i c/C++ men funktionaliten finns där med en annan syntax ...


Svara

Sv: Me i klasser

Postades av 2001-10-29 17:54:00 - Frans Englich

Vad är IDL?

Notera om jag skiter i att använda me, utan istället bara anger egenskapen(dvs egenskap = X istället för me.egenskap = X) så funkar det alldeles utmärkt.

Vad ska jag göra?

mvh Frans


Svara

Sv: Me i klasser

Postades av 2001-10-29 17:55:00 - Niklas Jansson

>Jag menar vaffö finns inte property get/let/set i C/C++ ????

och

>nä den exakta syntaxen finns inte i c/C++ men funktionaliten finns där med en annan syntax ...

Det vore trevligt om ni kunde hålla isär C och C++. Det är liksom olika språk.

Objektorientering existerar inte i C. Det enda som finns är struct som är tillhandahållen i första hand för att det är praktiskt.

Anledningen till att det inte finns något property let/get/set för C är för att en struct alltid har publika variabler...

/Niklas Jansson


Svara

Sv: Me i klasser

Postades av 2001-10-29 18:06:00 - Frans Englich

Ok, här kommer _hela_ klassen.

'==========BOF===========
<code>
Option Explicit
Private prop_CurrentMonth As Integer
Private prop_CurrentYear As Integer


Private Sub Class_Initialize()
Dim objRst As New ADODB.Recordset
Dim I As Integer
Dim OldType As Integer
Dim CurType As Integer
With frmMain

CurrentMonth = MyDate.CurrentMonth
CurrentYear = MyDate.CurrentYear
Call LoadLanguage



'----------Fixar ricmbyear(dvs aktuella året)----------
For I = 2000 To 2100
.RiCmbYear.AddItem I
Next I
.RiCmbYear.ListIndex = (Year(Date) - 2000)
'----------------------------------------------------

'---------Fixar Månadsbilder mm----------------------
'väljer bild efter MyDate.CurrentMonth
'----------------------------------------------------

'------------riflxRoomInfo-----------------------------
.RiFlxRoomInfo.FixedCols = 1
.RiFlxRoomInfo.FixedRows = 1
'----fixar datumen och skriver in bokningarna----------
If RenderFlexGrid(MyDate.CurrentMonth, MyDate.CurrentYear) = False Then
MsgBox "blabla, bananerna har ruttnat"
MyLog.AddEntity "RenderFlexGrid genererade ett fel"
End If
'------------------------------------------------------

'------------------------------------------

End With
End Sub

Private Function LoadLanguage() As Boolean
'On Local Error GoTo Err

LoadLanguage = True
Exit Function
Err:
LoadLanguage = False
End Function


Private Function RenderFlexGrid(Month As Integer, Year As Integer) As Boolean
'On Local Error GoTo Err
Dim objRst As New ADODB.Recordset
Dim I As Integer
Dim Sql As String
Dim NiceMonth As String * 2
Dim DDiff As Integer
Static NotFirstTime As Boolean
Static rstRooms As Recordset

If Month < 10 Then
NiceMonth = "0" & Month
Else
NiceMonth = Month
End If

'rensar flexen
frmMain.RiFlxRoomInfo.Clear

'---------Bytar Bild---------------
'----------------------------------

'----fixar rummen, vertikalt-------
If NotFirstTime = False Then
Dim OldType As Integer
Dim CurType As Integer
Set rstRooms = objCon.Execute("SELECT type FROM rooms ORDER BY type")
frmMain.RiFlxRoomInfo.Rows = rstRooms.RecordCount + 1
NotFirstTime = True
End If

rstRooms.MoveFirst
I = 1
Do Until rstRooms.EOF
OldType = CurType
Do Until CurType <> OldType
CurType = rstRooms(0)
frmMain.RiFlxRoomInfo.TextMatrix(I, 0) = "Rumstyp" & rstRooms(0).Value
rstRooms.MoveNext
I = I + 1
Loop
Loop
'------------------------------------------------------------------------


'---------Gör översta kolumnen snygg(datum raden)------------------------

frmMain.RiFlxRoomInfo.Cols = 1 + MyDate.DaysInMonth(Year, Month)
For I = 1 To frmMain.RiFlxRoomInfo.Cols - 1
frmMain.RiFlxRoomInfo.TextMatrix(0, I) = I & "/" & Month
Next I
'------------------------------------------------------------------------

'---------Hämtar relevanta bokningar och visar dem i flexgrid:en---------
Sql = _
"SELECT id, status, room, date_start, date_end, prim_customer " & _
"FROM bookings " & _
"WHERE (date_start <= '" & frmMain.RiCmbYear.Text & "-" & NiceMonth & "-" & "01' " & _
");"


Set objRst = objCon.Execute(Sql)

If objRst.RecordCount >= 1 Then
objRst.MoveFirst
Do Until objRst.EOF
DDiff = DateDiff("d", objRst(3), objRst(4))
For I = 0 To DDiff
If Day(objRst(3)) + I <= MyDate.DaysInMonth(Month) Then 'vi ska bara visa för den aktuella månaden
frmMain.RiFlxRoomInfo.Col = Day(objRst(3)) + I
frmMain.RiFlxRoomInfo.Row = objRst(2)
frmMain.RiFlxRoomInfo.CellBackColor = vbRed
End If
Next I
objRst.MoveNext
Loop
End If
'------------------------------------------------------------------------

'-----Ändrar width på kolumnerna-----
For I = 1 To frmMain.RiFlxRoomInfo.Cols - 1
frmMain.RiFlxRoomInfo.ColWidth(I) = 550
Next I
'------------------------------------

RenderFlexGrid = True
Exit Function
Err:
RenderFlexGrid = False
End Function

'//////////////////////////////////////////////////////////////
Public Sub RiCmdNextMonth_Click()
If Me.CurrentMonth <= 12 Then 'Här gnäller den inte.."
Call RenderFlexGrid(Me.CurrentMonth, Me.CurrentYear)
Me.CurrentMonth = Me.CurrentMonth + 1 'HÄR BLIR DET "Method or datamember not found"
End If
End Sub
'//////////////////////////////////////////////////////////////
Public Sub RiCmdPreviousMonth_Click()
If Me.CurrentMonth >= 2 Then
Call RenderFlexGrid(Me.CurrentMonth, Me.CurrentYear)
Me.CurrentMonth = Me.CurrentMonth - 1
End If
End Sub

Public Sub RiCmbyear_Click()
Me.CurrentYear = frmMain.RiCmbYear.Text

End Sub



Public Property Get CurrentMonth() As Integer
CurrentMonth = prop_CurrentMonth
End Property
Private Property Let CurrentMonth(NewValue As Integer)
If (NewValue >= 1) And (NewValue <= 12) Then
prop_CurrentMonth = NewValue
End If
End Property

Public Property Get CurrentYear() As Integer
CurrentYear = prop_CurrentYear
End Property
Private Property Let CurrentYear(NewValue As Integer)
If CurrentYear > 0 Then
prop_CurrentYear = NewValue
End If
End Property

'=================EOF=================='
</code>


Svara

Sv: Me i klasser

Postades av 2001-10-30 23:32:00 - Frans Englich

Ok, jag har hittat problemet. Det är ganska säkert en bugg i vb:

Som min kod i mitt förra inlägg visar så är bägge egenskapernas let-subbar private. Jag ändrade dem till public och då var vb nöjd. Detta borde absolut inte vara några problem i och med att jag använder me inuti klassen och där är en private sub "synlig". Tyv'r så klarar me inte av det, man får köra 'implicit' istället och skita i me, dvs egenskap istället för me.egenskap.

Slut på denna lilla historian..

mvh Frans


Svara

Sv: Me i klasser

Postades av 2001-10-31 07:54:00 - Gert Lindström

Varför vill man ha privata let / get ?

Anväds inte dessa för att skicka in resp hämta värden från klassen samt att kunna kontrollera att värdet som skall in i klassen är av rätt format etc.?


Svara

Sv: Me i klasser

Postades av 2001-10-31 09:35:00 - Pontus Wång

En bra anledning för att använda privata property let/get är om man manipulerar värdena när dom tilldelas eller avläses, då slipper man göra en funktion av de.


Svara

Sv: Me i klasser

Postades av 2001-10-31 11:35:00 - Frans Englich

Det vill man absolut, men vb gnäller om man försöker ändra en privat egenskap via me.

mvh Frans


Svara

Sv: Me i klasser

Postades av 2001-10-31 12:23:00 - Gert Lindström

Jag förstår iallafall inte varför du måste använda "me" när du är i klassen?

Kan du förklara skillnaden för mig. "me.Görnåt" kontra "Görnåt"


Svara

Sv: Me i klasser

Postades av 2001-10-31 12:56:00 - Pontus Wång

Jag kan se en MYCKET bra anledning till att välja att använda me. Om man har ett större projekt med flera komponenter som är likartade i koden så är det det enda bra sättet att tydliggöra att man arbetar mot sina egna egenskaper och inte de andra komponenternas. Nu kan man ju iofs argumentera att systemet är felkodat om sådan tydlighet behövs men det kan ju vara ett gammalt projetk som man rättar buggar, strukturerar upp eller helt enkelt inte har tid att koda om...

En annan anlednign till att ha privata property let/get är också att vissa kanske man på sikt vill göra till friend för object-collections och sånt...


Svara

Sv: Me i klasser

Postades av 2001-10-31 13:23:00 - Frans Englich

Kunde inte sagt det bättre själv.


Svara

Sv: Me i klasser

Postades av 2001-11-01 07:48:00 - Gert Lindström

Ok, det låter logiskt. Anledning till att jag frågade var att jag aldrig reflekterat över att göra så.


Svara

Sv: Me i klasser

Postades av 2001-11-01 11:28:00 - Johan Idstam

Me är en implicit deklarerad objektvariabel som refererar till det objekt man befinner sig i. 'Me.' listar alltså endast public och friend metoder i objektet, eftersom man ju så att säga får en extern syn av objektet.

I exemplet ovan var ju Get public så det var alltså den som syntes i listan.

/johan/


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 627
27 953
271 710
867
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