Mehrere Mögliche Antworten

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Mehrere Mögliche Antworten

    Hallo,

    Ich versuche ein Programm zu erstellen das mit ein Button und einer Label mehrere Mögliche Antworten gibt.

    Meine Versuche:

    VB.NET-Quellcode

    1. Label1.Text = "Test1" Or "Test2" Or "Test3"


    Es kommen zwar keine Fehlmeldungen wenn ich den Code geschrieben hab.
    Aber sobald ich es ausprobiere wird das Angezeigt:

    mfg User125
    Bilder
    • Unbenannt.PNG

      44,24 kB, 1.236×468, 146 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „user125“ ()

    Was willst du genau tun? Willst du alle Texte hintereinander im Label stehen haben oder willst du, dass nur einer der Texte zufällig ausgewählt wird?
    Bei ersterem musst du den &-Operator statt Or verwenden. Bei dem Zweiten solltest du dir die Random-Klasse anschauen.
    Hi
    Als erstes stellst du in den Einstellungen mal Option Strict auf On - sowohl projektweit, als auch in den Einstellungen von VS. Das verhindert schon mal gröberen Unfug.
    Wenn du's dann dynamisch machen möchtest, lege einfach ein Array an (z.B. kann auch statisch sein), in dem du die möglichen Werte angibst:

    VB.NET-Quellcode

    1. Private Shared _possibleValues() As String = New String() {"Antwort1", "Antwort2", "Antwort3"}

    auf die greifst du dann per Random zu:

    VB.NET-Quellcode

    1. Private _random As New Random()

    VB.NET-Quellcode

    1. Dim value As String = _possibleValues(_random.Next(0, _possibleValues.Length))


    Gruß
    ~blaze~

    user125 schrieb:

    wird das Angezeigt:
    Leider bekomme ich Dein Bild nicht zur Ansicht.
    Kannst Du es bitte auf einem werbungsfreien Server, z.B. bei vb-paradise, als Dateianhang, dranhängen?
    Editiere bitte Deinen ersten Post entsprechend.
    Danke.
    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!
    Danke.

    user125 schrieb:

    VB.NET-Quellcode

    1. Label1.Text = "Test1" Or "Test2" Or "Test3"
    Was soll denn hier eigentlich angezeigt werden?
    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!

    user125 schrieb:

    soll Zufall sein.
    Da sieh Dir die Lösung von @~blaze~: an und verstehe sie.
    Um die Anzeige musst Du Dich da natrürlich noch kümmern, das sollte aber für Dich kein Problem sein, da Du im Hauptforum gepostet hast.
    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!
    Du konvertierst implizit String zu Long und verknüpfst die dann bitweise mit OR. Immer weiter so!
    Wenn man nicht mal die Bedeutung von OR/AND Operatoren kennt, sollte man die Finger vom Programmieren lassen und erst mal ein Buch lesen (siehe meine Signatur).
    So hab es jetzt geschafft.

    Mit:


    VB.NET-Quellcode

    1. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    2. Label2.Text = value
    3. End Sub
    4. Private Shared _possibleValues() As String = New String() {"Antwort1", "Antwort2", "Antwort3"}
    5. Private _random As New Random()
    6. Dim value As String = _possibleValues(_random.Next(0, _possibleValues.Length))
    Kleiner Tipp: Dim value As String = _possibleValues(_random.Next(0, _possibleValues.Length)) gehört in Button3_Click und Button3 gehört umbenannt.

    Dim sollte man nur für Deklarationen innerhalb eines Methodenkörpers verwenden, da außerhalb eben die Zugriffsmodifizierer Public (alle), Private (innerhalb dieser Klasse), Protected (für Subklassen), Protected Friend (innerhalb der Assembly oder in Subklassen) und Friend (innerhalb der Assembly) zuständig sind. Zusätzlich dazu gibts eben noch den Shared-Modifizierer, der dafür sorgt, dass eine Variable nicht instanzspezifisch ist, sondern ein für alle Instanzen gemeinsam gültiger Wert ist. Da im Falle von _possibleValues eben für alle - vmtl - Form1-Instanzen der Wert gleich ist, wäre es nicht sinnvoll, ihn für jede Instanz von der Form1-Klasse erneut anzulegen. Deshalb Shared.

    Gruß
    ~blaze~
    Nochmal Danke für alle Antworten.

    Hab noch eine Frage kann ich mehr Antworten als eine Zeile schreiben ?

    Weil wenn ich das hier eingebe:

    VB.NET-Quellcode

    1. Private Shared _possibleValues() As String = New String() {"Antwort1", "Antwort2", "Antwort3", "Antwort4....................................................",
    2. "Antwort5"}


    Kommt eine fehlmeldung.
    @user125
    Benutze " , _ "

    VB.NET-Quellcode

    1. Private Shared _possibleValues() As String = New String() {"Antwort1", "Antwort2", "Antwort3", "Antwort4....................................................", _
    2. "Antwort5"}

    Meinst du so ?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LaMiy“ ()

    Alternativ kannst du aber auch einen Text als Vorlage nehmen (z.B. Resourcen oder Textdatei) und per Split oder anderer Trennart die einzelnen Antworten extrahieren:

    VB.NET-Quellcode

    1. Dim resourceAnswers() As String = My.Resources.Answers.Split(New String(){vbLf, vbCr}, StringSplitOptions.RemoveEmptyEntries)
    2. Dim fileAnswers() As String = System.IO.File.ReadAllLines("Data\Text.txt")


    Gruß
    ~blaze~