[C#] Hoe een string tot een objectnaam te converteren?

Pagina: 1
Acties:

  • Yucon
  • Registratie: December 2000
  • Laatst online: 19:53
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.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

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'


  • Yucon
  • Registratie: December 2000
  • Laatst online: 19:53
Aha.

Maar wat zou dan een betere keus zijn? Ik wil graag 10 onder elkaar staande textboxen inlezen.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Wat Janoz zegt. Een array of collectie maken.

We adore chaos because we like to restore order - M.C. Escher


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:17

mulder

ik spuug op het trottoir

De controls collectie van de parent doorlopen, zoiets als Page.Controls.

oogjes open, snaveltjes dicht


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 15:34

gorgi_19

Kruimeltjes zijn weer op :9

In Webforms of winforms?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Zoek naar reflection in msdn

  • Yucon
  • Registratie: December 2000
  • Laatst online: 19:53
Webforms

  • Beaker
  • Registratie: Juni 2002
  • Laatst online: 08-01 16:41
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.

  • Yucon
  • Registratie: December 2000
  • Laatst online: 19:53
of je eigen textboxen in een loop opbouwen
Liever dit.. maar waarom hebben objecten geen create method in .net?

  • Beaker
  • Registratie: Juni 2002
  • Laatst online: 08-01 16:41
Geen create method?

wat dacht je van:

new TextBox();

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34
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/


  • Yucon
  • Registratie: December 2000
  • Laatst online: 19:53
new TextBox();
|:( |:( |:(

* Yucon = }:O

Verwijderd

of je eigen textboxen in een loop opbouwen
Zoiets als dit bijvoorbeeld (in je Page_Load-eventhandler):
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?

Idd!!! :)

  • Yucon
  • Registratie: December 2000
  • Laatst online: 19:53
Ben minder newbie dan je misschien uit deze vraag op zou maken en ik durf het bijna niet te vragen, maar
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...
<heel klein stemmetje>hoe?</heel klein stemmetje>

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? :?

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34
In WinForms doe je dat als volgt:
code:
1
this.Controls.Add (textboxnaam);

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 15:34

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 28 oktober 2002 @ 12:14:
In WinForms doe je dat als volgt:
code:
1
this.Controls.Add (textboxnaam);
In Webforms ook.... ;)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

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? :?
/me snapt 't ook niet... ;)
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.


Denk voor je probleem ook eens aan een dynamisch UserControl... :7

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


O-)

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
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. :)

Noushka's Magnificent Dream | Unity

Pagina: 1