Form in Form, sowie TextBox Funktion (VB 2010)

  • VB.NET

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

    Form in Form, sowie TextBox Funktion (VB 2010)

    Guten Tag zusammen,

    Ich habe folgend drei Fragen:

    1.) Das Problem:

    Ich habe an die 100 Textboxen und müsste für jede eine If Abfrage(Wenn Textbox1.text > 0 and textbox101.text = "X" then....)
    programmieren um diese 100 mit anderen 100 abzugleichen.
    Das ist zwar mit unzähligen If Schleifen für jede einzelne Textbox realisierbar nur extrem aufwendig.

    Ist es möglich eine Funktion einzubauen, die kurz ist und diese Abfrage übernimmt, sodass ich nicht für jede Textbox eine eigene
    Abfrage machen muss ?


    2.) Form in Form

    Ist es möglich beim Klicken auf einen Button eine 2 Form erscheinen zu lassen ?



    3.) Im Timer wird eine MSGBox erzeugt, Problem ist, dass der Timer extrem schnell sein muss,
    mir jedoch deutlich mehr als eine MSGBox gezeigt wird, ich möchte jedoch nur eine einzige MSGBox angezeigt bekommen.


    Für hilfreiche Antworten wäre ich sehr dankbar !
    Hey,

    1.) 100 TextBoxen ist ein klarer Fall von Fehldesign.
    2.) Textbox1.Text > 0? Option STRICT ON.
    3.) Es gibt keine If-Schleifen.
    4.) Es ist möglich, beim Klicken eines Buttons eine neue Form zu zeigen. vb-paradise.de/allgemeines/tip…-und-aufruf-von-dialogen/
    5.) Überdenke, ob überhaupt ein Timer von Nöten ist.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    1. 100 TextBoxen? Das ist ein klarer Designfehler. Was ist der Plan?
    2. if-schleife.de
    3. Zum Form-Teil: Ja, Instanziierung von Forms und Aufruf von Dialogen
    4. Option Strict ON!

    Edit:// Das gibt es doch nicht, SpaceyX war genau mit dem Content schneller.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    VB.neter0101 schrieb:

    (VB 2010)
    Editiere Deinen 1. Post und ändere die Sprache auf VB.NET.
    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!
    Die vielen Texboxen sind für ein Schiffe Versenken Spiel. Jeder Spieler bekommt eine "Matrix" mit Textboxen einmal für das Platzieren der Schiffe, einmal zum angreifen (Spieler 2 ebenfalls). Die Spieler setzen ihre Schiffe mit 1 für 1er 2 für 2er...

    Mit der If Abfrage, versuche ich nun abzufragen, wenn eine TB > 0 und ebenfalls "X" ist dann kommt ein Treffer...
    Wenn die TB = 0 ist, ihr Inhalt also leer, so kommt kein Treffer und ein "O" wird ausgegeben.

    Die If Abfragen funktionieren soweit auch gut, nur es ist sehr anstrengend dies für jede TB zu schrieben, daher würde mich interessieren, ob man dies nicht sogar in eine Funktion packen könnte.
    Du kannst alle Controls deiner Form oder des Container (Panel, Groupbox etc...) durchlaufen.

    Im Beispiel:

    VB.NET-Quellcode

    1. For Each ctrl As Control In Me.Controls
    2. If TypeOf (ctrl) Is TextBox Then
    3. Dim txt As TextBox = CType(ctrl, TextBox)
    4. MsgBox("Ich bin der Inhalt von " + ctrl.Text)
    5. End If
    6. Next


    Wie du es verarbeitest musst du selbst herausfinden.
    @Bibi Ist nicht wirklich sinnvoll für ein Spiel halt. Es gibt btw mit LINQ eine OfType(Of T)-Extension, das erleichtert das Ganze, weil dann nicht mehr abgefragt werden muss etc.

    Außerdem: Kompiliert das? Eigentlich müsste es doch ctrl.GetType() = TypeOf(TextBox) sein, oder?
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Trade schrieb:

    @Bibi Ist nicht wirklich sinnvoll für ein Spiel halt.

    Nein, Sinnvoll ist es nicht. Das haben ihm auch schon anderes gesagt, das wollte ich nicht noch extra.
    Die Version von Snaptu ist da sicherlich sinnvoller, ich gehe doch ganz stark davon aus das der Themen-Ersteller damit erst recht nicht umzugehen weiß.

    Trade schrieb:


    Außerdem: Kompiliert das? Eigentlich müsste es doch ctrl.GetType() = TypeOf(TextBox) sein, oder?

    Option Strict ON. Funktioniert.
    Hm, ja, Option Strict On wäre das auch, aber Deins funzt tatsächlich. Komisches VB.NET. :D
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Wie auch immer. ​OfType würde ich halt nutzen, ist dann am Einfachsten.
    In C# kann man halt ​ctrl.GetType() == typeof(TextBox) machen, in VB.NET will er das anscheinend nicht so. Naja, egal. :)
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    VB.neter0101 schrieb:

    dies für jede TB zu schrieben
    Warum nicht so:

    VB.NET-Quellcode

    1. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged, TextBox2.TextChanged, TextBox3.TextChanged
    2. If sender Is TextBox1 Then
    3. 'bla
    4. ElseIf sender Is TextBox2 Then
    5. 'bla
    6. ElseIf sender Is TextBox3 Then
    7. 'bla
    8. End If
    9. End Sub
    Allerdings solltest Du grundlegend überprüfen, die TextBox-Variante zugunsten einer reinen GDI-Variante fallenzulassen.
    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!