Hoe kunt je in C# zelf de namen van variabelen of objecten opbouwen door strings aan elkaar te koppelen? Zeg maar zoals in javascript met eval. Zoiets als "Node_" + "1" zou dan een verwijzing naar het object Node_1 moeten worden.
Dat dat lastig is is niet verwonderlijk. Vooral in een gecompileerde taal is dat erg lastiug te implementeren. Daarnaast is het ook erg smerig en zo goed als altijd niet nodig. Dit soort constructies wordt vaak gebruikt door mensen die basis beginselen van het programmeren (zoals collections en arrays) niet onder de knie hebben.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Aha.
Maar wat zou dan een betere keus zijn? Ik wil graag 10 onder elkaar staande textboxen inlezen.
Maar wat zou dan een betere keus zijn? Ik wil graag 10 onder elkaar staande textboxen inlezen.
Wat Janoz zegt. Een array of collectie maken.
We adore chaos because we like to restore order - M.C. Escher
De controls collectie van de parent doorlopen, zoiets als Page.Controls.
oogjes open, snaveltjes dicht
In Webforms of winforms?
Digitaal onderwijsmateriaal, leermateriaal voor hbo
De references van deze textboxen in een array zetten. Je kunt ze dan gewoon via Node[i] aanspreken (waar i dan de index is, in dit geval lopend van 0 to 9.)
Als je VisualStudio.NET gebruikt om de form te maken hebben de textboxen echter allemaal een eigen unieke naam. Er zijn nu twee oplossingen. In de constructor van de Form de array opbouwen met de references van deze textboxen, of je eigen textboxen in een loop opbouwen. Eerste heeft als voordeel dat je visueel kunt werken, de tweede dat de code compacter en sneller is.
Edit:
Oh, in webforms. Ging uit van winforms. Sorry, dat gebruik ik nooit. Geen idee of dat hezelfde werkt.
Als je VisualStudio.NET gebruikt om de form te maken hebben de textboxen echter allemaal een eigen unieke naam. Er zijn nu twee oplossingen. In de constructor van de Form de array opbouwen met de references van deze textboxen, of je eigen textboxen in een loop opbouwen. Eerste heeft als voordeel dat je visueel kunt werken, de tweede dat de code compacter en sneller is.
Edit:
Oh, in webforms. Ging uit van winforms. Sorry, dat gebruik ik nooit. Geen idee of dat hezelfde werkt.
Liever dit.. maar waarom hebben objecten geen create method in .net?of je eigen textboxen in een loop opbouwen
Yucon schreef op 28 oktober 2002 @ 11:06:
[...]
Liever dit.. maar waarom hebben objecten geen create method in .net?
Misschien moet je eerst maar eens de basics van programmeren of .NET doornemen?
https://fgheysels.github.io/
Verwijderd
Zoiets als dit bijvoorbeeld (in je Page_Load-eventhandler):of je eigen textboxen in een loop opbouwen
C#:
1
2
3
4
5
| System.Web.UI.WebControls.TextBox[] TextBox = new System.Web.UI.WebControls.TextBox[10]; for (int i=0; i<10; i++) { TextBox[i] = new System.Web.UI.WebControls.TextBox(); } |
TextBox[0] tot en met TextBox[9] zijn dan 10 textboksjes waar je iets mee kunt doen.
PS. Dit voorbeeld zorgt er alleen voor dat de textboksjes aangemaakt worden; je moet ze dan uiteraard nog wel ergens op het scherm zetten enzo...
edit:
whoami schreef op 28 oktober 2002 @ 11:10
Misschien moet je eerst maar eens de basics van programmeren of .NET doornemen?
whoami schreef op 28 oktober 2002 @ 11:10
Misschien moet je eerst maar eens de basics van programmeren of .NET doornemen?
Idd!!!
Ben minder newbie dan je misschien uit deze vraag op zou maken en ik durf het bijna niet te vragen, maar
Ben de hele tijd driftig door m'n .net boek aan het rammelen en allerhande howto/online manuals/tutorials aan het bladeren maar elk van die dingen gaat ervan uit dat je je controls designtime op het scherm neerzet... maar dat is het probleem niet. Maar als je een variabel aantal items uit een db op het scherm wil zetten kun je dat vooraf zo lastig bepalen.
Ik zoek het veel liever zelf uit maar ik heb niet meer echt aanknopingspunten waar antwoorden zouden kunnen staan.
Snap het niet, ben toch niet de enige?
<heel klein stemmetje>hoe?</heel klein stemmetje>PS. Dit voorbeeld zorgt er alleen voor dat de textboksjes aangemaakt worden; je moet ze dan uiteraard nog wel ergens op het scherm zetten enzo...
Ben de hele tijd driftig door m'n .net boek aan het rammelen en allerhande howto/online manuals/tutorials aan het bladeren maar elk van die dingen gaat ervan uit dat je je controls designtime op het scherm neerzet... maar dat is het probleem niet. Maar als je een variabel aantal items uit een db op het scherm wil zetten kun je dat vooraf zo lastig bepalen.
Ik zoek het veel liever zelf uit maar ik heb niet meer echt aanknopingspunten waar antwoorden zouden kunnen staan.
Snap het niet, ben toch niet de enige?
In WinForms doe je dat als volgt:
code:
1
| this.Controls.Add (textboxnaam); |
https://fgheysels.github.io/
In Webforms ook....whoami schreef op 28 oktober 2002 @ 12:14:
In WinForms doe je dat als volgt:
code:
1 this.Controls.Add (textboxnaam);
Digitaal onderwijsmateriaal, leermateriaal voor hbo
Verwijderd
/me snapt 't ook niet...Yucon schreef op 28 oktober 2002 @ 12:12:
Ben minder newbie dan je misschien uit deze vraag op zou maken en ik durf het bijna niet te vragen, maar
[...]
Snap het niet, ben toch niet de enige?
Dat van this.Controls.Add had je toch heel makkelijk zelf kunnen ontdekken?
Je hebt IntelliSense toch wel aanstaan? En als je dan wat vaker op F1 drukt, gaat een wereld van uitleg voor je open...
offtopic:
Ik ben 't wel met je eens dat veel zaken net ff te kort uitgelegd worden. Zelf heb ik bijvoorbeeld ook vaak dat ik in de help gevonden heb dat het kan, maar dat er dan niet ff een voorbeeldje bijstaat van hoe dat dan precies moet. Maar ik ben wel van mening dat met wat uitproberen je een heel eind kunt komen en dat je door de help veel te gebruiken ook veel (meer) leert dan het simpelweg overtypen van voorbeelden.
Ik ben 't wel met je eens dat veel zaken net ff te kort uitgelegd worden. Zelf heb ik bijvoorbeeld ook vaak dat ik in de help gevonden heb dat het kan, maar dat er dan niet ff een voorbeeldje bijstaat van hoe dat dan precies moet. Maar ik ben wel van mening dat met wat uitproberen je een heel eind kunt komen en dat je door de help veel te gebruiken ook veel (meer) leert dan het simpelweg overtypen van voorbeelden.
Denk voor je probleem ook eens aan een dynamisch UserControl...
Verwijderd
voorbeeldje met buttons in een group op een form in een array
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
| Public Class ButtonArray Inherits System.Collections.CollectionBase Private ReadOnly HostForm As System.Windows.Forms.Form Private ReadOnly HostFormGroupBox As System.Windows.Forms.GroupBox Public Sub AddNewButton() Dim strTemp As String ' create a new instance of the button class Dim aButton As New System.Windows.Forms.Button() ' add the button to the collections internal list Me.List.Add(aButton) ' add the button to the controls collection of the form ' referenced by the host form group box field ' HostForm.controls.add(aButton) HostFormGroupBox.Controls.Add(aButton) ' set initial properties for the button object aButton.Top = 25 aButton.Left = Me.Count * 17 aButton.Width = 15 aButton.Height = 30 strTemp = Me.Count.ToString aButton.Tag = Me.Count If Me.Count > 9 Then aButton.Text = Mid$(strTemp, 1, 1) & vbCrLf & Mid$(strTemp, 2, 1) Else aButton.Text = Me.Count.ToString End If ' associate click event with handler AddHandler aButton.Click, AddressOf ClickHandler End Sub Public Sub New(ByVal host As System.Windows.Forms.GroupBox) ' HostForm = host HostFormGroupBox = host End Sub Default Public ReadOnly Property item(ByVal index As Integer) As System.Windows.Forms.Button Get Return CType(Me.List.Item(index), System.Windows.Forms.Button) End Get End Property Public Sub Remove() ' check to be sure there is a button to remove If Me.Count > 0 Then ' remove the last button added to the array from the host form ' controls collection , note the use of the default property ' in accessing the array ' HostForm.Controls.Remove(Me(Me.Count - 1)) HostFormGroupBox.Controls.Remove(Me(Me.Count - 1)) Me.List.RemoveAt(Me.Count - 1) End If End Sub Public Sub ClickHandler(ByVal sender As Object, ByVal e As System.EventArgs) ' MessageBox.Show("You have clicked button " & CType(CType(sender, System.Windows.Forms.Button).Tag, String)) End Sub End Class |
Je hebt ook een Dictonary collection. Die kan als key een string gebruiken. Mischien dat je dat ook kan helpen. Als je het ergens anders voor nodig hebt iig.
Pagina: 1