1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Downloads
  4. Galerie
    1. Alben
  5. Toolbox
    1. Passwort Generator
    2. Portchecker
  6. Mitglieder
    1. Mitgliedersuche
    2. Benutzer online
    3. Trophäen
    4. Team
Mo: 30 Juni 2025
  • Anmelden oder registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Forum
  • Dateien
  • Seiten
  • Bilder
  • Erweiterte Suche

Schön, dass du den Weg zu NodeZone.net gefunden hast! Aktuell bist du nicht angemeldet und kannst deshalb nur eingeschränkt auf unsere Community zugreifen. Um alle Funktionen freizuschalten, spannende Inhalte zu entdecken und dich aktiv einzubringen, registriere dich jetzt kostenlos oder melde dich mit deinem Account an.

Anmelden oder registrieren
    1. Nodezone.net Community
    2. Forum
    3. Gameserver & Hosting
    4. ArmA Series - ArmA 3 / Reforger
    5. Hilfeforum

    Button nach einer Auswahl in der ListBox deaktivieren oder aktivieren

      • Altis Life
    • fixle2011
    • 15. August 2020 um 16:12
    • Erledigt
    • fixle2011
      Amateur
      Reaktionen
      5
      Trophäen
      8
      Beiträge
      241
      • 18. August 2020 um 22:03
      • #41

      Ich möchte ja noch mehr als nur die 200 "überwachen", deshalb ja das "or". Und dann soll ja bei allen anderen Indizes der Button wieder funktionieren.

      Deshalb kam mir die "if"-Bedingung einfachher vor.

      Das liegt aber daran, dass ich die andere Schreibweise noch nicht so gut kenne ^^.

      source.gif

    • fixle2011
      Amateur
      Reaktionen
      5
      Trophäen
      8
      Beiträge
      241
      • 18. August 2020 um 22:18
      • #42

      Weil wie kann ich jetzt übergeben, dass ALLE anderen Indizes dementsprechen den Button aktivieren sollen? (In deinem Code)

      source.gif

    • Deathman
      Profi
      Reaktionen
      259
      Trophäen
      10
      Beiträge
      676
      Dateien
      12
      Bilder
      106
      • 18. August 2020 um 22:19
      • #43

      Ich weiß nicht genau ob es das fixen würde aber wenn du

      Code
      if (_control lbValue _selectedIndex isEqualTo (200 || 201)) then 
      {
          _button ctrlEnable false;
      };
      else 
      {
          _button ctrlEnable true;
      };

      machen würdest denke ich das es gehen würde

      bitte tut mir nichts wenn ich flasch liege versuche nur zu helfen

      Gruß Deathman

    • Henne
      Nerd
      Reaktionen
      155
      Trophäen
      7
      Beiträge
      840
      Bilder
      7
      • 18. August 2020 um 22:21
      • #44
      Zitat von fixle2011

      Ich möchte ja noch mehr als nur die 200 "überwachen", deshalb ja das "or".

      . . .

      Deshalb kam mir die "if"-Bedingung einfachher vor.

      Das liegt aber daran, dass ich die andere Schreibweise noch nicht so gut kenne ^^.

      Du kannst ohne Probleme mehrere Bedingungen zu einer großen Bedingung zusammenführen, indem du und/oder (&&/||) nutzt.

      Allerdings muss jede Bedingung für sich, immer ein Boolean ergeben.

      Um mehrere Zahlen zu prüfen funktioniert das z.B. so:

      Code
      _control lbValue _selectedIndex isEqualTo 200
      || _control lbValue _selectedIndex isEqualTo 201

      Du siehst, du musst immer das gesamte Abfragen.

      Es gibt dann noch viele andere Möglichkeiten, z.B. sowas: _control lbValue _selectedIndex in [200, 201]

      Da es viel zu viele Möglichkeiten gibt, sieh dir dazu am besten die Command-Liste im Wiki an (gerade anfangs habe ich die Liste überflogen und mich durch viele Commands geklickt und gelesen was die machen).

      Wichtig zu merken ist eben, dass alles Booleans sind.

      Mit "Vergleichern" (==, <, >, isEqualTo, usw.) können andere Werte zu Boolean "gewandelt" werden.


      Hier die beiden Codes, die Identisch funktionieren:

      Code: Code 1
      if (<CONDITION>) then {
          _button ctrlEnable true
      } else {
          _button ctrlEnable false
      }
      Code: Code 2
      _button ctrlEnable (<CONDITION>)

      Wenn du es aktuell lieber mit einer if-Abfrage lösen möchtest, dann darfst du das gerne tun.

    • Deathman
      Profi
      Reaktionen
      259
      Trophäen
      10
      Beiträge
      676
      Dateien
      12
      Bilder
      106
      • 18. August 2020 um 22:25
      • #45

      Wo du dir das sehr gut angucken kannst ist hier

      ARMA-3-SQF-Cheat-Sheet-Revision-3.pdf

    • fixle2011
      Amateur
      Reaktionen
      5
      Trophäen
      8
      Beiträge
      241
      • 18. August 2020 um 22:49
      • #46
      Zitat von Henne079

      _control lbValue _selectedIndex isEqualTo 200
      || _control lbValue _selectedIndex isEqualTo 201

      Schön und gut, aber dann bleibt der Button deaktiviert. Ich brauche also eine Bedingung, um ihn wieder zu aktivieren. Man kann sich vorstellen, dass das bei bis zu 100 Items in der Liste etwas langwierig wird, deshalb habe ich gedacht, ist die if-Abfrage einfacher, weil sie durch das "else" doch alles andere abdeckt oder?

      Folgendes funktioniert im Moment leider auch nicht:

      Code
      if (_control lbValue _selectedIndex isEqualTo 200) then 
      {
          _button ctrlEnable false;
      }
      else 
      {
          _button ctrlEnable true;
      };

      source.gif

    • Henne
      Nerd
      Reaktionen
      155
      Trophäen
      7
      Beiträge
      840
      Bilder
      7
      • 18. August 2020 um 23:44
      • #47

      Ich bin mir nicht ganz sicher, was du mit deinem Beitrag ausdrücken möchtest. Ich versuche dennoch darauf zu antworten. Sollte ich das Thema verfehlen, dann erkläre doch bitte nochmal deutlich was du meinst.

      Du musst dir überlegen, wann der Button deaktiviert werden soll. Alle Gründe für eine Deaktivierung müssen in die Bedingung.

      Dadurch wird der Button deaktiviert, wenn die Bedingung erfüllt ist. Ist die Bedingung nicht erfüllt, dann wird der Button aktiviert.

      Du brauchst da keine 100 if-Abfragen, wenn du das meintest.

      Da dir durch "_selectedIndex" direkt bekannt ist, welcher Eintrag ausgewählt ist, muss der Computer auch nicht alle Einträge durchlaufen und kann direkt diesen Eintrag prüfen.

      Du setzt die Value in den Einträgen nicht. Dies ist dein Code:

      Code
      _list lbAdd "";
      _list lbSetData [ (lbSize _list) - 1, "200"];
      _list lbAdd "";
      _list lbSetData [ (lbSize _list) - 1, "201"];

      Du setzt hier "Data". Du kannst natürlich Data nutzen. Allerdings sind das alles Strings.

      Um dann die Werte abzufragen musst du natürlich auch "lbData" verwenden.

      Versuche doch mal den Code so anzupassen, dass du statt Value die Data des Eintrages ausliest und vergleichst. Bedenke, dass es sich jetzt nicht mehr um Numbers, sondern um Strings handelt.


      Hinweis:

      Um Data einem Eintrag zu setzen, kannst du auch so vorgehen (Geschmackssache):

      Code
      _list lbSetData [_list lbAdd "", "200"]; // Eintrag 1
      _list lbSetData [_list lbAdd "", "201"]; // Eintrag 2
    • Deathman
      Profi
      Reaktionen
      259
      Trophäen
      10
      Beiträge
      676
      Dateien
      12
      Bilder
      106
      • 19. August 2020 um 00:26
      • #48

      Ich bin mir wie immer nicht sicher ob das geht denke aber schon wenn er mehr zahlen hat die er hat würde es dann auch nicht so gehen

      C++
      private _numberlist =["201", "202", "203", "204", "205"];
      {
      _list lbSetData[_list lbadd, "", _x];
      }forEach _numberlist;

      Bitte sagt mir wenn ich falsch liege

      PS bin am Handy

    • Henne
      Nerd
      Reaktionen
      155
      Trophäen
      7
      Beiträge
      840
      Bilder
      7
      • 19. August 2020 um 00:47
      • #49

      Deathman

      Ja so kann man es natürlich auch machen.

      Allerdings hast du einen kleinen Fehler drin. Nach "lbAdd" muss das Komma entfernt werden.

      Da vermutlich die Einträge auch Texte haben sollen (oder bereits haben, aber mal wieder entfernt wurden). Ist es sinnvoll auch die Texte in das Array auszulagern. Wobei es dann sowieso darauf ankommt, wo die Daten für die Einträge herkommen (Datenbank, Config, etc.).

      Könnte aber so aussehen:

      Code
      private _entrysList = [
          ["Eintrag 1", "201"],
          ["Eintrag 2", "202"],
          ["Eintrag X", "20X"]
      ];
      {
          _list lbSetData [_list lbadd (_x select 0), _x select 1]
      } forEach _entrysList
    • Basti0208
      Schüler
      Reaktionen
      58
      Trophäen
      10
      Beiträge
      138
      Dateien
      1
      • 19. August 2020 um 13:59
      • #50
      Code
      // Füllen
      for "_i" from 1 to 300 do {
          _list lbSetData [_listbox lbAdd format ["Eintrag %1", _i], str(_i)];
      };
      // -----------------
      
      // Dein Eventhandler
      params ["_control", "_selectedIndex"];
      _btn ctrlEnable !((_control lbData _selectedIndex) in ["200", "201"]); // lbData gibt String zurück!
      // -----------------

      So, das sollte aber klappen...
      Deine Befüllung kannst du natürlich machen, wie du willst - ist nur ein Beispiel.

      Mit freundlichen Grüßen

      Basti

    • fixle2011
      Amateur
      Reaktionen
      5
      Trophäen
      8
      Beiträge
      241
      • 19. August 2020 um 16:08
      • #51

      Bevor ich weiter fortfahre möchte ich an dieser Stelle erst mal allen danken die sich hier an meinem Problem beteiligen. Vielen Dank für eure Mühen!

      Allerdings sehe ich in euren Codes immer noch ein gravierendes Problem. Ich werde es jetzt mal ganz banal beschreiben:

      1. onLBSelChanged ruft in "MeinDialog1" die Funktion "MeineFunktion1" auf. Das funktioniert soweit auch super.

      2. "MeineFunktion1" soll prüfen (ACHTUNG: Jetzt kommt das Fallbeispiel), ob der Index des ausgewählten Elements 200, 201, 211 oder 214 beinhaltet.

      2.1 Wenn der Indexwert 200, 201, 211, oder 214 ist, soll der Button deaktiviert werden.

      2.2 Beträgt der Indexwert nicht die in 2.1 genannten Zahlen und ist zum Beispiel 204, 212, oder 230, soll der Button aktiviert werden.

      ACHTUNG: Das Problem an euren Codes ist im Moment folgendes:

      Ihr deaktiviert den Button bei einer bestimmten Indexzahl, reaktiviert ihn aber nicht wieder bei den anderen Zahlen. Der Button bleibt bei all euren Codes weiterhin deaktiviert, egal ob man einen anderen Index ausgewählt hat, welcher von dem Code eigentlich nicht betroffen ist.

      Es muss also eine Möglichkeit gefunden werden, nur die zu deaktivierenden Szenarien abzudecken und durch ein else, oder ähnliches alle anderen Szenarien abzudecken. Bei längeren Listen wie in meinem Fall müsste man sonst sehr viel tippen, was natürlich weder für den Code noch für mich gut ist :P.

      Deshalb beharre ich ja nach wie vor auf der if Abfrage, da ich dort mit dem else in meiner Theorie alles andere abdecken könnte. Aber ich glaube das das nicht so einfach funktioniert.

      Ich hoffe ihr habt das jetzt weitestgehend verstanden und könnt mit weiterhelfen.

      Schon mal Danke im Voraus!

      source.gif

    • Henne
      Nerd
      Reaktionen
      155
      Trophäen
      7
      Beiträge
      840
      Bilder
      7
      • 19. August 2020 um 16:58
      • #52
      Zitat von fixle2011
      . . .

      ACHTUNG: Das Problem an euren Codes ist im Moment folgendes:

      Ihr deaktiviert den Button bei einer bestimmten Indexzahl, reaktiviert ihn aber nicht wieder bei den anderen Zahlen. Der Button bleibt bei all euren Codes weiterhin deaktiviert, egal ob man einen anderen Index ausgewählt hat, welcher von dem Code eigentlich nicht betroffen ist.

      . . .

      Und genau hier liegst du falsch.

      Der Code kann sehr wohl den Button deaktivieren und ihn danach wieder aktivieren.

      Vorraussetzung dafür ist aber, dass die Einträge in die Liste richtig hinzugefügt werden und dann auch der richtige Wert abgefragt wird.

      Denn du setzt "Data" fragst aber "Value" ab. Wenn du "Data" setzt, dann muss auch "Data" abgefragt werden.

      Darauf habe ich aber schon weiter oben hingewiesen:

      Zitat von Henne079

      . . .

      Du setzt hier "Data". Du kannst natürlich Data nutzen. Allerdings sind das alles Strings.

      Um dann die Werte abzufragen musst du natürlich auch "lbData" verwenden.

      Versuche doch mal den Code so anzupassen, dass du statt Value die Data des Eintrages ausliest und vergleichst. Bedenke, dass es sich jetzt nicht mehr um Numbers, sondern um Strings handelt.

      . . .

      Ich habe keinen Code geschrieben, der diese Funktion beinhaltet. Daher auch die Aufforderung an dich, jetzt noch gar die letzte Änderung selbst zu machen. Denn es bringt nichts, wenn hier nur weiter bereits fertiger Code gesendet wird.

      Wie willst du je selber programmieren, wenn du gerade bei so Kleinigkeiten, dir alles vorkauen lässt.

      Wie gesagt, versuche es doch mal selbst. Teste ob dein Code richtig ist/funktioniert.

      Wenn es überhaupt nicht klappt, bekommst du hier auf jeden Fall hilfe. Dann aber nur mit deinem eigenem Code, bei dem du versucht hast das ganze anzupassen.

      Du brauchst auch keine if-Abfrage. Denn das Ergebnis der Bedingung wird dem Button direkt gesetzt. Somit spart man sich Code, hat aber die selbe Funktion.

      Diese Anpassung ist auch wirklich nicht schwer.

      Die Anpassung in der Bedingung dauert nichtmal 5 Sek..

      Das setzen der Einträge ist bereits vorgekaut.

      So als Tipp:

      Wenn du den Button deaktivieren möchtest, ist das eine Negierung (!).

    • Basti0208
      Schüler
      Reaktionen
      58
      Trophäen
      10
      Beiträge
      138
      Dateien
      1
      • 19. August 2020 um 17:57
      • #53
      Zitat von Henne079

      Wenn du den Button deaktivieren möchtest, ist das eine Negierung (!).

      Wie bereits in meinem Code zu sehen.

      Eine Abfrage, welche sich im ctrlEnable befindet muss zwingend true oder false zurückgeben, also wird der Button logischerweise bei den anderen Einträgen wieder aktiviert, da die Abfrage dann wieder true ergibt.

      Sorry, aber die Personen, die dir helfen und ich schreiben dir hier ewig Sachen zu (teilweise fertigen Code!!!) und du verstehst es trotzdem nicht und das Gefühl, dass du es überhaupt testest oder selber dran rumschraubst, habe ich auch nicht.

      Try and Error heißt es, also spiel mit den Abfragen rum, lies dich im Wiki schlau, was sehr wohl alles sehr gut beschreibt (Bsp.: Es gibt lbSetData und lbData - da könnte man auf die Idee kommen, dass das zueinander gehört meiner Meinung nach und nicht lbValue plötzlich verwendet).

      Mit freundlichen Grüßen

      Basti

    • fixle2011
      Amateur
      Reaktionen
      5
      Trophäen
      8
      Beiträge
      241
      • 19. August 2020 um 18:16
      • #54

      Ihr habt mich alle nur verwirrt, aber ich habe jetzt mal mein Gehirn eingesetzt und all eure Informationen kombiniert.

      Watson (Ich :P) ist dann auch endlich mal zum gewünschten und funktionierenden Ergebnis gelangt.

      Code: It's a kind of magic
      params ["_control", "_selectedIndex"];
      
      private _button = ctrlParent _control displayCtrl 1111;
      
      _button ctrlEnable !(_control lbData _selectedIndex in ["200", "201", "usw.", "..."]);

      source.gif

    Registrieren oder Einloggen

    Du bist noch kein Mitglied von NodeZone.net? Registriere dich kostenlos und werde Teil einer großartigen Community!

    Registrieren

    Benutzer online in diesem Thema

    • 1 Besucher

    Wichtige Links & Informationen

    Server & Hosting-Ressourcen

      Server Administration & Hosting Basics

      Windows Server Support & Guides

      Linux Server Configuration & Help

      Setting up TeamSpeak 3 & VoIP Servers

      Domains & Web Hosting for Beginners & Professionals

      Cloud Hosting, Docker & Kubernetes Tutorials

    Gameserver & Modding-Ressourcen

      ArmA 3 Tutorials & Script Collection

      Renting & Operating Gameservers

      DayZ Server Management & Help

      FiveM (GTA V) Server & Script Development

      Rust Server Modding & Administration

      Setting up & Optimizing ARK Survival Servers

    NodeZone.net – Deine Community für Gameserver, Server-Hosting & Modding

      NodeZone.net ist dein Forum für Gameserver-Hosting, Rootserver, vServer, Webhosting und Modding. Seit 2015 bietet unsere Community eine zentrale Anlaufstelle für Server-Admins, Gamer und Technikbegeisterte, die sich über Server-Management, Hosting-Lösungen und Spielemodding austauschen möchten.


      Ob Anleitungen für eigene Gameserver, Hilfe bei Root- und vServer-Konfigurationen oder Tipps zu Modding & Scripting – bei uns findest du fundiertes Wissen und praxisnahe Tutorials. Mit einer stetig wachsenden Community findest du hier Antworten auf deine Fragen, Projektpartner und Gleichgesinnte für deine Gaming- und Serverprojekte. Schließe dich NodeZone.net an und werde Teil einer aktiven Community rund um Server-Hosting, Gameserver-Management und Modding-Ressourcen.

    Wer jetzt nicht teilt ist selber Schuld:
    1. Nutzungsbestimmungen
    2. Datenschutzerklärung
    3. Impressum
    4. Urheberrechts- oder Lizenzverstoß melden
  • Trimax Design coded & layout by Gino Zantarelli 2023-2025©
    Community-Software: WoltLab Suite™