vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest niedziela, 28 kwietnia 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

sortowanie kolekcji składającej się z min. 2 klas


otwartyotwarty rozpoczął: pipu123 postów: 2



napisał: admin
postów: 613


umieszczony:
16 maja 2013
18:12

edytowany:
16 maja 2013
18:54

  
Witaj,

To nie jest odpowiedz na Twoje pytanie...
Sortowanie elementow roznych klas wymaga okreslenia typu klasy. Jest to konieczne do tego, by odczytac odpowiednie wlasciwosci, specyficzne dla obiektu danej klasy.
Mozna do tego uzyc funkcji TypeName. Powoduje to niepotrzebne skomplikowanie kodu. Uwazam, ze nie tedy droga.

Zamiast uzywac roznych klas dla opisu elementow ktore zamierzasz przetwarzac razem uzyj jednej klasy. Elementy jednego typu latwiej posortowac.
Zeby rozroznic rodzaj elementow uzyj dodatkowej wlasciwosci okreslajacej typ elementu.

Czyli wlasciwosci twojej klasy wygladalyby tak:

Option Explicit

Public Nazwa As String
Public Masa As Double

Public Grubosc As Double
Public Szerokosc As Double
Public SzerokoscD As Double
Public Dlugosc As Double

Public LiczbaSztuk As Integer
Public NumerPozycji As Integer
Public TypElementu As TypElementu

Const WspolczynnikMasy = 7850



Module glownym zdefiniuj jeszcze typ wyliczeniowy:

Public Enum TypElementu

cProfil = 1
cBlacha = 2

End Enum



(edit)
Twoj kod mozna tez uproscic:
Option Explicit

Dim kolekcjaBlachyIprofile As Collection

Dim blacha As BlachyAll
Dim profilSlup As ProfileAll

Sub slup10()
Set kolekcjaBlachyIprofile = New Collection

Set blacha = New BlachyAll
blacha.NumerPozycji = 4
blacha.Grubosc = 5
blacha.Szerokosc = 120
blacha.Dlugosc = 850
blacha.LiczbaSztuk = 1
kolekcjaBlachyIprofile.Add blacha

Set blacha = New BlachyAll
blacha.NumerPozycji = 3
blacha.Grubosc = 9
blacha.Szerokosc = 48
blacha.Dlugosc = 320
blacha.LiczbaSztuk = 1
kolekcjaBlachyIprofile.Add blacha

Set blacha = New BlachyAll
blacha.NumerPozycji = 2
blacha.Grubosc = 12
blacha.Szerokosc = 56
blacha.Dlugosc = 320
blacha.LiczbaSztuk = 2
kolekcjaBlachyIprofile.Add blacha

Set blacha = New BlachyAll
blacha.NumerPozycji = 5
blacha.Grubosc = 16
blacha.Szerokosc = 80
blacha.Dlugosc = 220
blacha.LiczbaSztuk = 5
kolekcjaBlachyIprofile.Add blacha

Set blacha = New BlachyAll
blacha.NumerPozycji = 7
blacha.Grubosc = 20
blacha.Szerokosc = 240
blacha.Dlugosc = 500
blacha.LiczbaSztuk = 1
kolekcjaBlachyIprofile.Add blacha

Set blacha = New BlachyAll
blacha.NumerPozycji = 6
blacha.Grubosc = 25
blacha.Szerokosc = 120
blacha.Dlugosc = 260
blacha.LiczbaSztuk = 2
blacha.SzerokoscD = 80
kolekcjaBlachyIprofile.Add blacha

Set blacha = New BlachyAll
blacha.NumerPozycji = 8
blacha.Grubosc = 10
blacha.Szerokosc = 80
blacha.Dlugosc = 80
blacha.LiczbaSztuk = 2
kolekcjaBlachyIprofile.Add blacha

Set profilSlup = New ProfileAll
profilSlup.NumerPozycji = 1
profilSlup.Nazwa = "HEB260"
profilSlup.LiczbaSztuk = 2
profilSlup.Masa = 35.6
profilSlup.Dlugosc = 4532
kolekcjaBlachyIprofile.Add profilSlup

End Sub



pozdrawiam
Admin
napisał: pipu123
postów: 5


umieszczony:
12 maja 2013
20:48

  
Moduł: Module1
' w jaki sposób posortować kolekcję wg NumerPozycji od najmniejszej do największej
' ewentualnie czy jest inny rodzaj przechowywania danych
Option Explicit
Dim kolekcjaBlachyIprofile As Collection
Dim blacha02S As BlachyAll, blacha03S As BlachyAll, blacha04S As BlachyAll, blacha05S As BlachyAll
Dim blacha06S As BlachyAll, blacha07S As BlachyAll, blacha08S As BlachyAll
Dim profilSlup As ProfileAll

Sub slup10()
Set kolekcjaBlachyIprofile = New Collection

Set blacha02S = New BlachyAll
blacha02S.NumerPozycji = 4
blacha02S.Grubosc = 5
blacha02S.Szerokosc = 120
blacha02S.Dlugosc = 850
blacha02S.LiczbaSztuk = 1
kolekcjaBlachyIprofile.Add blacha02S

Set blacha03S = New BlachyAll
blacha03S.NumerPozycji = 3
blacha03S.Grubosc = 9
blacha03S.Szerokosc = 48
blacha03S.Dlugosc = 320
blacha03S.LiczbaSztuk = 1
kolekcjaBlachyIprofile.Add blacha03S

Set blacha04S = New BlachyAll
blacha04S.NumerPozycji = 2
blacha04S.Grubosc = 12
blacha04S.Szerokosc = 56
blacha04S.Dlugosc = 320
blacha04S.LiczbaSztuk = 2
kolekcjaBlachyIprofile.Add blacha04S

Set blacha05S = New BlachyAll
blacha05S.NumerPozycji = 5
blacha05S.Grubosc = 16
blacha05S.Szerokosc = 80
blacha05S.Dlugosc = 220
blacha05S.LiczbaSztuk = 5
kolekcjaBlachyIprofile.Add blacha05S

Set blacha06S = New BlachyAll
blacha06S.NumerPozycji = 7
blacha06S.Grubosc = 20
blacha06S.Szerokosc = 240
blacha06S.Dlugosc = 500
blacha06S.LiczbaSztuk = 1
kolekcjaBlachyIprofile.Add blacha06S

Set blacha07S = New BlachyAll
blacha07S.NumerPozycji = 6
blacha07S.Grubosc = 25
blacha07S.Szerokosc = 120
blacha07S.Dlugosc = 260
blacha07S.LiczbaSztuk = 2
blacha07S.SzerokoscD = 80
kolekcjaBlachyIprofile.Add blacha07S

Set blacha08S = New BlachyAll
blacha08S.NumerPozycji = 8
blacha08S.Grubosc = 10
blacha08S.Szerokosc = 80
blacha08S.Dlugosc = 80
blacha08S.LiczbaSztuk = 2
kolekcjaBlachyIprofile.Add blacha08S

Set profilSlup = New ProfileAll
profilSlup.NumerPozycji = 1
profilSlup.Nazwa = "HEB260"
profilSlup.LiczbaSztuk = 2
profilSlup.Masa = 35.6
profilSlup.Dlugosc = 4532
kolekcjaBlachyIprofile.Add profilSlup
End Sub

Klasa: BlachyAll
Option Explicit

Public Nazwa As String
Public Masa As Double

Public Grubosc As Double
Public Szerokosc As Double
Public SzerokoscD As Double
Public Dlugosc As Double

Public LiczbaSztuk As Integer
Public NumerPozycji As Integer

Const WspolczynnikMasy = 7850

Klasa: ProfileAll
Public Nazwa As String
Public Masa As Double
Public Dlugosc As Double

Public LiczbaSztuk As Integer
Public NumerPozycji As Integer


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z