PalinkatoR: "Array" aus Textfeldern

Hallo.
Stehe vor folgendem Problem:Schreibe an einer HTA-Datei, mit der es möglich sein soll, IP-Adressen einzustellen. Zur Eingabe der Adresse habe ich 4 Textfelder im HTML-Teil erstellt:
IP0,IP1,IP2,IP3

Die IP-Adresse ist dann:

IP0.value & "." & IP1.value & "." & IP2.value & "." & IP3.value

Anfänglich habe ich nur ein Textfeld benutzt, jedoch fiel mir keine Möglichkeit ein, die Eingabe des Users zu überprüfen, sprich festzustellen, dass die jeweiligen Teile der Adresse Intergers zwischen 0 und 255 sind, usw, deshalb habe ich die 4 getrennten Felder erstellt.

Nun benutze ich folgenden Code um die Eingabe des Users zu überprüfen:

dim IP0int

If IP0.value <> "" Then
 IP0int = IP0.value
Else
 MsgBox "Enter Numeric Value From The Interval [0;255]"
 Exit Sub
End If

IP0int = CByte(IP0int)

If Err.Number <> 0 Then
 MsgBox "Enter Numeric Value From The Interval [0;255]"
 Exit Sub
End If

Soweit passt alles. Nun soll man aber über das Programm auch DNS-Server, Gateway und Subnet Mask einstellen können, dh ich habe 5 mal 4 Felder für die 5 Adressen. Dh ich müsste diesen Code ^^ 20 mal kopieren. :ugly:

Nun zu meiner eigentlichen Frage:
Gibt es eine Möglichkeit, für die 20 Textfelder eine Schleife zu schreiben, quasi aus den Textfeldern eine Array zu machn - Text(i) - und durch diese durchzuiteriern? Oder habt ihr ganz andere Lösungsvorschläge für mein Problem?

Danke im Voraus!
P.

  1. Moin!

    Soweit passt alles. Nun soll man aber über das Programm auch DNS-Server, Gateway und Subnet Mask einstellen können, dh ich habe 5 mal 4 Felder für die 5 Adressen. Dh ich müsste diesen Code ^^ 20 mal kopieren. :ugly:

    Oder eine Funktion schreiben.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Moin!

      Soweit passt alles. Nun soll man aber über das Programm auch DNS-Server, Gateway und Subnet Mask einstellen können, dh ich habe 5 mal 4 Felder für die 5 Adressen. Dh ich müsste diesen Code ^^ 20 mal kopieren. :ugly:

      Oder eine Funktion schreiben.

      • Sven Rautenberg

      So, habe nun diese Funktion geschrieben

      Function CheckInput(x)

      On Error Resume Next

      If x <> "" Then
       CheckInputInt = x
       MsgBox CheckInputInt(2)
      Else
       MsgBox "Enter Numeric Values From The Interval [0;255]"
       CheckInputInt = Empty
       MsgBox CheckINputInt
       Exit Function
      End If

      CheckInputInt = CByte(CheckInputInt)

      If Err.Number <> 0 Then
       MsgBox x & " isn't a valid value. Enter Numeric Values From The Interval [0;255]"
       CheckInputInt = Empty
       MsgBox CheckINputInt
       Exit Function
      End If

      End Function

      Allerdings habe ich folgendes Problem
      Wenn ich sie so aufrufe:

      CheckInput IP0.value, IP1.value usw dann wird die Funktion nicht ausgeführt.

      Wenn ich nur ein Argument benutze, funktionierts.
      Oder es so aufrufe:

      CheckInput IP0.value
      CheckInput IP1.value
      ....

      Warum geht es nicht mit mehreren Argumenten? Brauche ich ein Array innerhalb der Funktion (was ich zwar scho ausprobiert habe, es aber dennnoch nich funktioniert hat....aber trotzdem?) ?

      Danke im Voraus

      1. Moin!

        So, habe nun diese Funktion geschrieben

        Das ist in meinen Augen keine Funktion, sondern eine Prozedur. Funktionen geben einen Wert zurück, beispielsweise "true" oder "false", je nachdem, ob eine Prüfung erfolgreich war, oder nicht. Oder einen in jedem Fall numerischen Wert.

        Prozeduren sind lediglich Abkürzungen für eine Gruppe von Anweisungen - ohne Rückgabewert.

        Allerdings habe ich folgendes Problem
        Wenn ich sie so aufrufe:

        CheckInput IP0.value, IP1.value usw dann wird die Funktion nicht ausgeführt.

        Deine Funktion erwartet exakt EINEN Parameter, nicht mehrere.

        Wenn ich nur ein Argument benutze, funktionierts.

        Eben.

        Oder es so aufrufe:

        CheckInput IP0.value
        CheckInput IP1.value
        ....

        Warum geht es nicht mit mehreren Argumenten? Brauche ich ein Array innerhalb der Funktion (was ich zwar scho ausprobiert habe, es aber dennnoch nich funktioniert hat....aber trotzdem?) ?

        Ich bin kein Experte für VBScript, und es ist hier im Forum auch nicht sonderlich beliebt.

        Arrays sind sicherlich hilfreich zur Abkürzung von sich wiederholenden Aufgaben mit wechselnden, gleichartigen Daten. Gibts da keine Anleitung zu Arrays in VBScript? Dann solltest du die mal vordringlich suchen.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
  2. Hallo PalinkatoR!

    Die IP-Adresse ist dann:
    IP0.value & "." & IP1.value & "." & IP2.value & "." & IP3.value
    Anfänglich habe ich nur ein Textfeld benutzt, jedoch fiel mir keine Möglichkeit ein, die Eingabe des Users zu überprüfen, sprich festzustellen, dass die jeweiligen Teile der Adresse Intergers zwischen 0 und 255 sind, usw, deshalb habe ich die 4 getrennten Felder erstellt.

    Nun zu meiner eigentlichen Frage:
    Gibt es eine Möglichkeit, für die 20 Textfelder eine Schleife zu schreiben, quasi aus den Textfeldern eine Array zu machn - Text(i) - und durch diese durchzuiteriern? Oder habt ihr ganz andere Lösungsvorschläge für mein Problem?

    Ich würde das so lösen:

      
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    <html>  
    <head>  
      <title>HtaTest</title>  
      <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">  
      <HTA:APPLICATION ID="HtaTest"  
        APPLICATIONNAME="HtaTest"  
        BORDER="thick"  
        CAPTION="yes"  
        ICON="http://src.selfhtml.org/favicon.ico"  
        SHOWINTASKBAR="yes"  
        SINGLEINSTANCE="yes"  
        SYSMENU="yes"  
        WINDOWSTATE="normal"  
      >  
      <script type="text/javascript">  
      <!--  
       function checkForm(myForm){  
        for (var i= 0; i < myForm.elements.length; i++){  
         if (myForm.elements[i].type == 'text'){  
           if (myForm.elements[i].value == "") {  
             alert("Bitte Wert von 0 bis 255 eingeben");  
             myForm.elements[i].focus();  
             return false;  
           }  
           if ((parseInt(myForm.elements[i].value) >= 0) && (parseInt(myForm.elements[i].value) <= 255)) {  
             //OK  
           } else {  
             alert("Bitte Wert von 0 bis 255 eingeben");  
             myForm.elements[i].focus();  
             return false;  
           }  
         }  
        }  
        alert ("alles OK!");  
        return true;  
       }  
      -->  
      </script>  
    </head>  
    <body>  
     <form name="Form1" id="Form1" action="#" onsubmit="return checkForm(this)">  
      <fieldset><legend>IP</legend>  
       <input type="text" name="IP0" size="3" maxlength="3" value="01"/> .  
       <input type="text" name="IP1" size="3" maxlength="3" value="02"/> .  
       <input type="text" name="IP2" size="3" maxlength="3" value="03"/> .  
       <input type="text" name="IP3" size="3" maxlength="3" value="04"/>  
      </fieldset>  
      <fieldset><legend>DNS</legend>  
       <input type="text" name="DNS0" size="3" maxlength="3" value="11"/> .  
       <input type="text" name="DNS1" size="3" maxlength="3" value="12"/> .  
       <input type="text" name="DNS2" size="3" maxlength="3" value="13"/> .  
       <input type="text" name="DNS3" size="3" maxlength="3" value="14"/>  
      </fieldset>  
      <fieldset><legend>Gateway</legend>  
       <input type="text" name="GW0" size="3" maxlength="3" value="21"/> .  
       <input type="text" name="GW1" size="3" maxlength="3" value="22"/> .  
       <input type="text" name="GW2" size="3" maxlength="3" value="23"/> .  
       <input type="text" name="GW3" size="3" maxlength="3" value="24"/>  
      </fieldset>  
      <fieldset><legend>Subnet</legend>  
       <input type="text" name="SN0" size="3" maxlength="3" value="31"/> .  
       <input type="text" name="SN1" size="3" maxlength="3" value="32"/> .  
       <input type="text" name="SN2" size="3" maxlength="3" value="33"/> .  
       <input type="text" name="SN3" size="3" maxlength="3" value="34"/>  
      </fieldset>  
      <input type="submit" value="Verarbeiten"/>  
     </form>  
    </body>  
    </html>  
    
    

    Achtung: Ich habe JavaScript verwendet, die Syntax in VB-Script ist aber recht ähnlich wie du letztes Mal gesehen hast.
    Der Code funktioniert so aber auch in anderen Browsern und daher ist die Chance so höher, dass noch jemand Verbesserungen beisteuert.

    Viele Grüße

    H-P Ortner

    1. Hallo PalinkatoR!

      Der Code funktioniert so aber auch in anderen Browsern und daher ist die Chance so höher, dass noch jemand Verbesserungen beisteuert.

      Ja und das man den Code straffen kann sehe ich jetzt auch:

        
        <!--  
         function checkForm(myForm){  
          for (var i= 0; i < myForm.elements.length; i++){  
           if (myForm.elements[i].type == 'text'){  
             if ((parseInt(myForm.elements[i].value) >= 0) && (parseInt(myForm.elements[i].value) <= 255)) {  
               //OK  
             } else {  
               alert("Bitte Wert von 0 bis 255 eingeben");  
               myForm.elements[i].focus();  
               return false;  
             }  
           }  
          }  
          alert ("alles OK!");  
          return true;  
         }  
        -->  
        
      
      

      Viele Grüße

      H-P Ortner