I VB6 tror jag max antalet kontroller på en Form är 256 st. Vet ej vad som är max men det är fler än 256 (vb.net). Under .Net finns det inga direkta begränsningar ang hur många kontroller du kan ha. jag har hört att man max kan ha 65535 fönster totalt i windows och kontroller är ju fönster. Låter som ett gamalt windows... Det är ju bara 2 bytes 65535 fönster... Kan nog inte riktigt stämma tror jag... :) Tänkte snarare på att ms har gjort en hel hög med windows och varje windows har blivit av med några av begränsningarna som föregångaren hade... :) Kollade lite i hjälpen för att se om det kanske skulle kunna ge ngn ledtråd. jo precis.. Det har du rätt i: nej det är inte 4 bytes de allokerar. Tänkte på just hwnd. Sant att det är mera. kör med anakrino eller reflector på den får du se att implementeringen i riktiga frameworket är en control[] Grejen är att en control[] (array) inte är samma som en ControlCollection. det är två skilda saker. det jag sa är att controlscollection classen i .net framework (inte ROTOR!) Hej.. hämta "reflector" om du inte redan har den. Tack!Antal kontroller på en Form
Hur är det i VB.Net och C# ?Sv: Antal kontroller på en Form
Mvh
Peter IlisSv: Antal kontroller på en Form
Mkt baseras på din dators resurser. Olika kontroller tar olika mkt resurser, så det gäller att du har koll så din applikation inte rusar iväg...
//Johan N
"This posting is provided "AS IS" with no warranties, and confers no
rights."Sv: Antal kontroller på en Form
dock är ju ett hWnd 4 bytes så det borde ju kunna vara mer.
Roger Johansson
Cornflakes coder and wannabeSv: Antal kontroller på en Form
Sv: Antal kontroller på en Form
Sv: Antal kontroller på en Form
Kontrollerna ligger i en ControlsCollection som implementerar en IList.
En IList håller reda på sitt innehåll i en ArrayList och den har egenskapen Capacity, vilket är den kapacitet som listan har att hålla objekt.
Egenskapen returnerar en Integer så därför kan du troligen max ha 2 147 483 647 vilket är lika med Int32.MaxValue.
//Mikael.NETSv: Antal kontroller på en Form
men eftersom varje kontroll har ett hWnd så är ju även begränsningen kopplad till max antal fönster som windows kan öppna..
jag tror mer på att begränsingen sitter i vad windows klarar att visa och inte på hur många objekt man kan stoppa in i controls listan.
//RogerSv: Antal kontroller på en Form
<code>
public class ControlCollection : IList, ICollection, IEnumerable, ICloneable {
private ArrayList collection = new ArrayList ();
</code>
Konstigt att man valt en ArryList och inte en snabbare collection hanterare.
Om nu max är 2 147 483 647 så anser jag nästan att det inte finns en gräns, då du troligen kommer ha svårt att komma upp i så många kontroller och speciellt utan att bli av med minne och dator resurser. Är det 4 byte som en kontrol allokerar i minnet? Är det någon som kommer ihåg detta? Hittar inte vart jag läste de. Om det nu är 4 byte så skulle det bli ca 8000 MB. Undar om det kan stämma?
//Johan NSv: Antal kontroller på en Form
det är massor av minne.
det är bara själva hwnd som är 4 bytes.
sedan allokerar fönstret div gdi resurser , minne för var dess wndproc ligger , alla params för fönstret , tex bredd , höjd , z index , position etc etc.
[^i själva windows alltså , inte i .net , .net kontrollerna wrappar sedan mot dessa native fönster]
dessutom så om vi pratar om .net så tar ju själva .net wrapper objekten upp en massa minne oxo.
ps.
de använder INTE en arraylist internt
dekompilera frameworket så ser man att de har en vanlig control[] som de redimmar manuellt..
[edit]
dessa params krävs för att skapa ett fönster:
typedef struct tagCREATESTRUCT {
LPVOID lpCreateParams;
HINSTANCE hInstance;
HMENU hMenu;
HWND hwndParent;
int cy;
int cx;
int y;
int x;
LONG style;
LPCTSTR lpszName;
LPCTSTR lpszClass;
DWORD dwExStyle;
} CREATESTRUCT, *LPCREATESTRUCT;
så det är ju MINST så mycket som allokeras för ett fönster.
sedan har jag alla fönster en hDc , och varje hDc har en penna,font,brush,textfärg,textbgfärg.
och massa massa annat..
[edit]Sv: Antal kontroller på en Form
"de använder INTE en arraylist internt"
Koden jag klistrade in kommer från CLI:n (källkoden för .net grund komponenter.
//johan NSv: Antal kontroller på en Form
sedan hur de implementerat det i rotor är en annan sak.
//RogerSv: Antal kontroller på en Form
//Johan NSv: Antal kontroller på en Form
är implementerad med en intern control[] och inte med en arraylist som du skrev..
kör reflector och kolla så får du se
OBS.
ROTOR är INTE source koden till .net framework , det är en egen version , förvisso med samma klasser , men inte med samma kod...
//RogerSv: Antal kontroller på en Form
Jo det vet jag, nu tittade jag på CLI:n samt Mono och de såg likadana ut.
Skall ta en djupare titt, bara för nöjes skull. Du har nog helt rätt, konstigt att man inte
gör så under CLI:n samt Mono. Förvisso har man control[] även i CLI:n och Mono priojektet, där indexen plockar controllen ur ArrayListen.
Mvh Johan NSv: Antal kontroller på en Form
http://www.aisto.com/roeder/dotnet/
mycket trevlig decompiler.
bläddra till system.windows.forms.control.controlarray
där ser man att det finns en intern control[] samt att indexerarens get del använder sig av den interna control[] variabeln.
//Roger
screenshot:
http://www.sourcecode4free.com/controlcollection.gifSv: Antal kontroller på en Form
Skall ta hem det. Verkar ju vara ett bra o smidigt program.
Har du kört junit någon gång? Du kanske inte kodar Java?
Finns ialla fall en motsvarighet till .Net nu.
Unit är ett app där du kan göra tester på dina klasser och dess metoder.
Istället för att ex buggtesta dem i en consoleapplication kan man bygga lite testkod till unit, där du säger vad du förväntar dig för svar, m.m. så är det bara att köra denna varje gång du kompilerat om din klass. Riktigt trevligt.
http://nunit.org/default.htm
Ha en skön dag.
Mvh Johan N