controls wo ist der fehler

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    controls wo ist der fehler

    VB.NET-Quellcode

    1. Dim lehrerzahl As String = NumericUpDown1.Value.ToString
    2. Controls("RichTextBox" & lehrerzahl.ToString()).Text = TextBox1.Text ' fehler zeile
    3. Select Case True
    4. Case CheckBox1.Checked : Controls("RichTextBox" & lehrerzahl.ToString()).Text = Controls("RichTextBox" + lehrerzahl.ToString()).Text + " Ma_"
    5. Case CheckBox2.Checked : Controls("RichTextBox" & lehrerzahl.ToString()).Text = Controls("RichTextBox" + lehrerzahl.ToString()).Text + " D_"
    6. Case CheckBox3.Checked : Controls("RichTextBox" & lehrerzahl.ToString()).Text = Controls("RichTextBox" + lehrerzahl.ToString()).Text + " Eng_"
    7. Case CheckBox3.Checked : Controls("RichTextBox" & lehrerzahl.ToString()).Text = Controls("RichTextBox" + lehrerzahl.ToString()).Text + " Ph_"
    8. Case CheckBox4.Checked : Controls("RichTextBox" & lehrerzahl.ToString()).Text = Controls("RichTextBox" + lehrerzahl.ToString()).Text + " Ch_"
    9. Case CheckBox5.Checked : Controls("RichTextBox" & lehrerzahl.ToString()).Text = Controls("RichTextBox" + lehrerzahl.ToString()).Text + " Mu_"
    10. Case CheckBox6.Checked : Controls("RichTextBox" & lehrerzahl.ToString()).Text = Controls("RichTextBox" + lehrerzahl.ToString()).Text + " Ku_"
    11. Case CheckBox7.Checked : Controls("RichTextBox" & lehrerzahl.ToString()).Text = Controls("RichTextBox" + lehrerzahl.ToString()).Text + " Info_"
    12. Case CheckBox8.Checked : Controls("RichTextBox" & lehrerzahl.ToString()).Text = Controls("RichTextBox" + lehrerzahl.ToString()).Text + " Sp_"
    13. Case CheckBox9.Checked : Controls("RichTextBox" & lehrerzahl.ToString()).Text = Controls("RichTextBox" + lehrerzahl.ToString()).Text + " WAT_"
    14. Case CheckBox10.Checked : Controls("RichTextBox" & lehrerzahl.ToString()).Text = Controls("RichTextBox" + lehrerzahl.ToString()).Text + " Bio".ToString
    15. End Select
    16. NumericUpDown1.Value += 1
    Bilder
    • e.JPG

      52,83 kB, 809×492, 276 mal angesehen
    Na, weil vermutlich keine RichTextBox mit diesem Namen existiert.
    Dein Datenmodell ist auch schon wieder mal kompletter Ranz, man numeriert keine Controls durch und fragt sie schon gar nicht über einen String ab, mal ganz zu schweigen davon, dass man erst recht nicht so viele Controls erstellt. DataSet, DataGridView und Databinding sind da die richtigen Adressen, Tutorials dazu gibts genug hier im Forum.

    Oder du verwendest deine Methode weiter und legst Integer.MaxValue Richtextboxen an und benennst diese entsprechend.
    Hi
    mal ein paar Fragen:
    - Wie würdest du Me.Controls(String) implementieren (kann von mir aus auch ein "naiver" Ansatz mit For-Each-Schleife und String-Vergleich auf Namen sein)? Warum ist es daher sinnvoll, nur ein einziges mal abzufragen, welches Control dem Text zugeordnet wird? Es gibt ja sowas wie Variablen.
    - Warum ist es sinnvoll, Controls zu benennen? (kann ich einem Text "RichTextBox1" ansehen, was er für eine Rolle spielt? Was hingegen, wenn dasteht "_contentBodyRichTextBox") Warum funktioniert folglich auch das von dir angestrebte "Indexieren" der RichTextBox-Controls nicht mehr?
    - So viele RichTextBox-Instanzen zeugen von einem schlechten Datenmodell, das kannst du sicher über andere Controls (DataGridView, ListBox, etc.) und ggf. einem selbsterstellten Renderer (DrawItem/MeasureItem von ListBox/ComboBox/...) schöner lösen, falls überhaupt sowas nötig ist.
    - Wenn ich dir einen Apfel geb', so hältst du eine Instanz der Klasse Apfel in der Hand. Wenn ich nur einen Apfel hatte, so hab' ich jetzt keinen Apfel, meine rechteHandApfel-Variable ist also Nothing. Wenn ich jetzt den Apfel beschreiben möchte, fliegt mir eine NullReferenceException entgegen - weil was will ich auch beschreiben? Wenn ich jetzt in einer Liste nach einem Element mit einem bestimmten Namen suche und dieses Element nicht finde, ist das gefundene Resultat ebenfalls Nothing. Wenn ich jetzt auf die gefundene Instanz zugreifen will, ist sie Nothing und mir fliegt eine NullReferenceException entgegen mit dem von dir gezeigten Text. Wie kann ich mein Problem also so schildern, dass ggf. auch eine Lösung daraus folgt?

    Gruß
    ~blaze~
    Du musst dich nicht mit VB gut auskennen, sondern dir selbst zumuten, so etwas vom Kopf aus zu lösen. Versuche, dich von dem Gedanken zu lösen, dass VB dir deinen Spielraum und dein Verhalten definiert. DU bist derjenige, der seine Kreativität umsetzen will, somit musst du halt eine Umsetzungsweise im Kopf haben. Im realen Leben wirst du ja ebenfalls vor Probleme gestellt, für die es eine Lösung zu finden gilt. Wenn du dir da einen Weg überlegen kannst, über den es möglich ist, so ein Problem zu lösen, übertrage den Lösungsweg nach VB. Dazu musst du prinzipiell nur die Grundlagen und etwas Kreativität besitzen, das Know-How kommt dann von alleine.
    Wenn du mal was falsch machst sagt dir das dann schon wer, wenn du danach fragst oder du schnallst es selber mit der Zeit. Wichtig ist aber halt, dass du viel ausprobierst - auch in separaten Testprojekten, wo du eine Idee umsetzt, die du hast. Außerdem solltest du dich mit der Entwicklungsumgebung auseinandersetzen und verstehen.
    Deine Probleme kannst du ggf. auch auf einem Block skizzieren und solange aufdröseln, bis sie in lösbare Teilprobleme zerlegt wurden. Dazu musst du aber verstanden haben, wie du Probleme überhaupt auftrennst.

    Btw. glaube ich nicht, dass du dumm bist und deswegen keine Logikaufgabe lösen kannst, genau das ist es nämlich zum großen Teil.

    Gruß
    ~blaze~
    das doofe ist ja so geht es
    ohne strickt on
    leider
    Spoiler anzeigen

    VB.NET-Quellcode

    1. NumericUpDown1.Value -= 1
    2. Dim a As Integer
    3. a = NumericUpDown1.Value
    4. For i = NumericUpDown1.Value To a
    5. Controls("RichTextBox" + a.ToString()).Text = TextBox1.Text
    6. If CheckBox1.Checked = True Then
    7. Controls("RichTextBox" + a.ToString()).Text = Controls("RichTextBox" + a.ToString()).Text + " Ma/"
    8. End If
    9. If CheckBox2.Checked = True Then
    10. Controls("RichTextBox" + a.ToString()).Text = Controls("RichTextBox" + a.ToString()).Text + " D/"
    11. End If
    12. If CheckBox3.Checked = True Then
    13. Controls("RichTextBox" + a.ToString()).Text = Controls("RichTextBox" + a.ToString()).Text + " Eng/"
    14. End If
    15. If CheckBox4.Checked = True Then
    16. Controls("RichTextBox" + a.ToString()).Text = Controls("RichTextBox" + a.ToString()).Text + " Ph/"
    17. End If
    18. If CheckBox5.Checked = True Then
    19. Controls("RichTextBox" + a.ToString()).Text = Controls("RichTextBox" + a.ToString()).Text + " Ch/"
    20. End If
    21. If CheckBox6.Checked = True Then
    22. Controls("RichTextBox" + a.ToString()).Text = Controls("RichTextBox" + a.ToString()).Text + " Mu/"
    23. End If
    24. If CheckBox7.Checked = True Then
    25. Controls("RichTextBox" + a.ToString()).Text = Controls("RichTextBox" + a.ToString()).Text + " Ku/"
    26. End If
    27. If CheckBox8.Checked = True Then
    28. Controls("RichTextBox" + a.ToString()).Text = Controls("RichTextBox" + a.ToString()).Text + " Info/"
    29. End If
    30. If CheckBox9.Checked = True Then
    31. Controls("RichTextBox" + a.ToString()).Text = Controls("RichTextBox" + a.ToString()).Text + " Sp/"
    32. End If
    33. If CheckBox10.Checked = True Then
    34. Controls("RichTextBox" + a.ToString()).Text = Controls("RichTextBox" + a.ToString()).Text + " WAT/"
    35. End If
    36. If CheckBox11.Checked = True Then
    37. Controls("RichTextBox" + a.ToString()).Text = Controls("RichTextBox" + a.ToString()).Text + " Bio"
    38. End If
    39. Next
    40. ComboBox1.Items.Clear()
    41. For i = 1 To NumericUpDown1.Value
    42. ComboBox1.Items.Add(Controls("RichTextBox" + i.ToString()).Text)
    43. Next
    44. My.Computer.FileSystem.CreateDirectory("C:\Schule")
    45. My.Computer.FileSystem.CreateDirectory("C:\Schule" + "Label1")
    46. For i = 1 To NumericUpDown1.Value
    47. My.Computer.FileSystem.WriteAllText("C:\Schule" + "Label1" + "" + "Label1" + i.ToString + ".txt", Controls("RichTextBox" + i.ToString()).Text, False)
    48. Next
    49. My.Settings.zählöer = NumericUpDown1.Value
    50. My.Settings.Save()
    Mal so ne Frage: Verwendest in dem Fall irgendwie a als Variable für NumericUpDown1.Value (schon mal NumericUpDown1 benennen)? Wenn ja, dann sollte das als Dim a As Decimal = NumericUpDown1.Value stattfinden. Wenn es kein Decimal sein soll, konvertierst du es vorher in den entsprechenden Typen. VB unterscheidet ja bekanntlich zwischen verschiedenen Zahlentypen. So gibt es SByte, Short, Integer, Long für Gannzahlen mit Vorzeichen und Byte, UShort, UInteger, ULong für Zahlen ohne. Zur Konvertierung verwendest du entsprechend CSByte, CShort, CInt, CLng oder CByte, CUShort, CUInt, CULng. Für Gleitkommazahlen gibt es Single und Double, wobei die Genauigkeit von Double höher ist, als die von Single. Decimal gibt's darüber hinaus eben auch noch.
    Wenn du jetzt noch erklärst, was du mit dem Code bezweckst, wäre dir leichter zu helfen.

    Edit: ne, Moment, du hast da ja schon a As Integer angelegt, ganz übersehen. Verwende einfach a = CInt(NumericUpDown1.Value). Der Code stimmt aber trotzdem irgendwie nicht. Ist zumindest irgendwie sinnlos. Wozu gibt's eig. NumericUpDown1?

    Gruß
    ~blaze~
    @Daniel Baumert:: Wieviele RichTextBoxen hast Du denn in Deiner Form?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ich hab es jetzt mit split gemacht den hinter jedem lehrer wird jetzt ein "|" eingefügt

    aber ich hab ein anderes problem


    das geht auch nichz
    For i As Integer = 1 To 50
    zeile = Controls("TextBox" + i.ToString()).Text
    haupteil = haupteil + zeile + "|"
    Next

    Daniel Baumert schrieb:

    aber ich hab ein anderes problem
    Flucht nach vorn?
    Frage nicht beantwortet, neues Nicht-Problem aufgeworfen?
    Ja was nun?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!