| |
VB.NET - Ein- und UmsteigerWie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: Tommi467 | Datum: 16.09.11 08:49 |
| Hallo zusammen,
ich tue mich nochh immer ein bisschen schwer mit dem Umstieg auf VB.Net.
Eine Funktion die ich schmerzlich vermisse ist das Indizieren von Objekt (so heißt es glaube ich).
Gemeint ist die Funktion unter VB4-5-6, wo ich jedem Objekt (z.B. Button) einen Index zuordnen konnte. Wenn ich dann Eigenschaften der Buttons ändern will, kann ich das ganz einfach auf diese Art und Weise:
For I = 1 to 10
Button1(I).Visible = True
Next I
Wie kann ich das jetzt unter VB.Net realisieren. Es kann doch nicht sein, das ich da jetzt
10 Zeilen für benötige oder??? Die Eigenschaft Index gibt es ja nicht mehr... oder heißt die jetzt anders???
Für eure Hilfe wäre ich sehr dankbar.
Gruß
Tommi | |
Re: Wie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: Tommi467 | Datum: 16.09.11 09:06 |
| Danke, hat sich erledigt, hab es doch noch gefunden.
Für alle die es vielleicht auch mal suchen:
For I = 1 To 4
MsgBox(Me.Controls("Button" & I).Text)
Me.Controls("Button" & I).Text = "Test " & I
Next
Gruß Tommi | |
Re: Wie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: Tommi467 | Datum: 16.09.11 09:16 |
| Und das nächste Problem...
Me.Controls("RadioButton" & I).Tag = "XYZ" geht einwandfrei.
Hingegen liefert dies einen Fehler
Me.Controls("RadioButton" & I).Checked = True Fehler: Checked ist kein Member von System.Windows.Form.Control
Die bisherige Anweisung
RadioButton2.Checked = True funktioniert aber einwandfrei.
Was mache ich falsch? | |
Re: Wie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: Caddy | Datum: 16.09.11 09:30 |
| Wenn es um alle Buttons, Labels oder so geht geht auch das hier :
For Each c As Control In Me.Controls
If TypeOf c Is Label Then c.Visible = True
If TypeOf c Is Button Then c.Visible = True
If TypeOf c Is ComboBox Then c.Visible = True
If TypeOf c Is ListBox Then c.Visible = True
If TypeOf c Is TextBox Then c.Visible = True
If TypeOf c Is RichTextBox Then c.Visible = True
Next Das funktioniert aber nur mit Eigenschaften, die JEDEM Control eigen ist. Da die Eigenschaft "Checked" nur bei einigen, gesetzt werden kann, geht das nicht.
Allerdings macht es bei Radiobutton keinen Sinn ( meiner Meinung nach) alle auf Checked zu setzen...da sollte man eher Checkboxen nehmen.
Gruss Caddy | |
Re: Wie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: FZelle (Moderator) | Datum: 16.09.11 09:32 |
| Und wieso willst du diese schlechten VB6 Angewohnheiten nach VB.NET herüberretten?
Es gibt keinen Grund das so zu machen, wenn man mal aufgehört hat in VB6 und "geht doch" zu denken.
Warum meinst du das so machen zu müssen? | |
Re: Wie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: Tommi467 | Datum: 16.09.11 09:59 |
| @ DaveS & Caddy
Vielen Dank, ihr habt mir sehr geholfen und schnell noch dazui
Super.
@ FZelle
Wer sagt den das ich schlechte angewohnheiten übernehmen will.
Wenn ich aber die notwendigkeit habe eine Gruppe von Objekte zu
ändern, wie soll ich es den sonst machen als auf den oben beschrieben Weg?
Ich habe rund 25 RadioButtons als Statusanzeige von Verbindungseigenschaften eingesetzt.
Wenn gewisse Bedingungen Erfüllt sind, soll checked auf True
Das Programmiere ich doch nicht 25 mal.
Ich habe eine Routine, die als Parameter die IP-Verbindung als String bekommt.
Und mit diesem Source soll dann entsprechend geprüft und ge"checked" werden. | |
Re: Wie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: Tommi467 | Datum: 16.09.11 10:18 |
| Ich komme nicht vorwärts :-/
Beim Programmdurchlauf bekomme ich jetzt eine neue Meldung mit der ich nichts anfangen kann:
NullReferenceException wurde nicht behandelt
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Beitrag wurde zuletzt am 16.09.11 um 10:19:38 editiert. | |
Re: Wie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: DotNetErbse | Datum: 16.09.11 10:33 |
| natürlich kannst Du Controls indizieren, Du brauchst nur einen Indexer...
Dim lst As New List(Of RadioButton)
with lst
.Add(RadioButton1)
.Add(RadioButton2)
.Add(RadioButton3)
.Item(1).Checked = True
end with es geht sogar das hier, obwohl das m.M.n. Unsinn ist:
lst.Item(0).Checked = True
lst.Item(0).Visible = False
lst.Item(1).Visible = False Denn warum soll ein nicht sichtbarer Radiobutton selektiert sein dürfen...??
Geht aber...
Mit freundlichen Gr??en
DotNetErbse
[Es hei?t Paket und nicht Packet, auch wenn Standard augenscheinlich von Standar(t)e kommt,hei?t es dennoch Standar(d)] | |
Re: Wie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: Tommi467 | Datum: 16.09.11 10:33 |
| In der fetten Zeile taucht der Fehler auf
Dim Versuche As Integer
Dim Ip As String
For RadioObjectCount = 1 To 9
Select Case RadioObjectCount
Case 1
Ip = "192.168.1.1"
Case 2
Ip = "192.168.1.111"
Case 3
Ip = "192.168.2.1"
Case 4
Ip = "192.168.2.112"
Case 5
Ip = "192.168.71.136"
Case 6
Ip = "192.168.2.254"
Case 7
Ip = "192.168.71.1"
Case 8
Ip = "192.168.30.40"
Case 9
Ip = "192.168.0.254"
End Select
For Versuche = 1 To 3
If My.Computer.Network.Ping(Ip) Then
If CType(Me.Controls("RadioButton" & RadioObjectCount), _
RadioButton).Checked() = False Then
If Val(Me.Controls("RadioButton" & _
RadioObjectCount).Tag) > 3 Then Fehlertext$ = _
Fehlertext$ & Date.Now & " - " & Me.Controls( _
"RadioButton" & RadioObjectCount).Text & " wieder" & _
"verfügbar" & vbCrLf
End If
CType(Me.Controls("RadioButton" & RadioObjectCount), _
RadioButton).Checked() = True
Me.Controls("RadioButton" & RadioObjectCount).Tag = "0"
Versuche = 3
Else
If Versuche = 3 Then
CType(Me.Controls("RadioButton" & RadioObjectCount), _
RadioButton).Checked() = False
Me.Controls("RadioButton" & RadioObjectCount).Tag = Val( _
Me.Controls("RadioButton" & RadioObjectCount).Tag) + 1
End If
End If
Next
ProgressBar1.Value = RadioObjectCount : Application.DoEvents()
Next | |
Re: Wie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: Tommi467 | Datum: 16.09.11 11:06 |
| @DaveS
Danke für den Source. Der übersteigt aber leider meinen Horizont, da verstehe ich nur Bahnhof.
Es fängt schon damit an, das ich nicht den Sinn erkenne, Objekte zur Laufzeit zu erzeugen.
Ich habe doch dann einen viel höheren Aufwand diese per Code zu positionieren... oder hab ich da noch einen Gedankenfehler?
Deshalb war es mir bisher immer lieber die Objekte die brauche selbst auf der Form zu plazieren als zur Laufzeit zu generieren.
Bisher hat mir das noch niemand vernünftig erklären können. | |
Re: Wie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: Tommi467 | Datum: 16.09.11 11:18 |
| So, ich bin jetzt wieder ein kleines Strück weiter:
Also:
Wenn ich ein neues Projekt starte und 4 Radiobuttons plaziere funktioniert das
"checked" setzen einwandfrei.
Nicht aber in meiner App.
Der Unterschied ist, das dort alle RadioButtons in einem eigenen Panel sitzen.
Der Grund dafür besteht darin, das ich JEDES RadioButton unabhängig vom Zustand
der andern setzen muss, ohne diese zu verändern.
Ich könnte ja irgendetwas anderes zum signalisieren nehmen, aber inzwischen geht es hier ums Prinzip Ich würde es gerne verstehen... und vor allem... so ans laufen bekommen um zu lernen. | |
Re: Wie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: DotNetErbse | Datum: 16.09.11 12:13 |
| Betrifft nicht Deine OptionsButtons, aber:
Objekte zur Laufzeit
Stelle Dir ein Bestellsystem vor, bei dem Du zu einem Produkt jeweils verschiedene Zusatzprodukte mitbestellen kannst. Die Produkte sind in einer Datenbank gespeichert, die Zusatzprodukte ebenfalls in der DB in einer relationalen Tabelle mit Verweis auf Deine Hauptprodukte
z.B.:
[Hauptprodukt] Fahrrad
[Zusatzprodukt] Luftpumpe
[Zusatzprodukt] Klingel
[Zusatzprodukt] Halogenlicht vorne
[Zusatzprodukt] LED-Licht hinten
[Zusatzprodukt] Satteltaschen
[Hauptprodukt] Motoroller
[Zusatzprodukt] Luftpumpe
[Zusatzprodukt] Hupe
[Zusatzprodukt] Helm
Willst Du in Deiner Bildschirmmaske die Checkbuttons ALLER Zusatzprodukte vorhalten und nur DIE PASSENDEN anzeigen ??? Wieviele sollen es denn bitteschön sein??? 10, 100, 1000 ???
Die bessere Variante wäre doch, die Checkboxen entsprechend ihrer Benötigung überhaupt erst zu erstellen. Text, CheckedStatus und Eventhandler inklusive...
Mit freundlichen Gr??en
DotNetErbse
[Es hei?t Paket und nicht Packet, auch wenn Standard augenscheinlich von Standar(t)e kommt,hei?t es dennoch Standar(d)] | |
Re: Wie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: Tommi467 | Datum: 16.09.11 12:26 |
| @DaveS
Vielen Dank für deine Mühe und Geduld.
Ich habe es jetzt am laufen... und... was noch viel wichtiger ist!! ICH HAB'S VERSTANDEN
Du hast mir wirklich sehr weitergeholfen, Danke.
@DotNetErbse
Nach dem Beitrag von Dave habe ich jetzt auch deinen verstanden, der ja in etwa auf das gleiche abzielt.
zu deinem letzten Beitrag: Ist klar, ich will nicht bestreiten, das es irgendwo sinn macht, ich bin bisher gut ohne ausgekommen weil mir die Plazierung dann einfach aufwändfig war.
In deinem Beispiel hätte ich eine DB und eine OptionsListe benutzt...
Aber... es führen viele Wege nach Rom
Mein Programm läuft jetzt jedenfalls.
Wenn ich es gestestet habe, kann ich es ja noch einmal mit dem Funktionierenden Source einstellen.
Danke für eure Mühe
Tommi | |
Re: Wie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: Tommi467 | Datum: 16.09.11 13:08 |
| Ja, hatte die auch schon gefunden, hatte erst den ganzen Christbaum an.
Aber war vielleicht auch ganz gut so, durch das Fehlersuchen habe ich
es jetzt auch verstanden | |
Re: Wie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: Tommi467 | Datum: 22.09.11 10:29 |
| Nachdem ich jetzt einige Zeit damit gearbeitet habe und dachte ich käme jetzt zurecht,
hat sich da doch noch ein Problem aufgetan:
Ich habe der Struktur unter anderem ein Integer-Feld hinzugefügt.
Funktioniert auch soweit einwandfrei.
Jetzt möchte ich aber den Inhalt ändern, wenn sich im zugehörigen Textfeld der Wert ändert
DB_FreeSpace(ObjectCount).NetDriveAlert = Val(DB_FreeSpace( _
ObjectCount).Txt_NetSpaceAlert.Text) Bei diese Eingabe bekomme ich die Fehlermeldung:
Der Ausdruck ist ein Wert und kann nicht als Ziel einer Zuweisung verwendet werden.
Was mache ich falsch?
Beitrag wurde zuletzt am 22.09.11 um 10:31:11 editiert. | |
Re: Wie kann ich Objekte unter VB.Net indizieren ??? | | | Autor: Tommi467 | Datum: 22.09.11 10:54 |
| Danke, es geht
und
Ich hab's verstanden | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|