Dialogfeldkomponenten dynamisch kreieren



  • Hallo,
    habe folgendes Problem:
    muss zur Laufzeit entscheiden, wie viele Radiobuttons ich auf einem Dialog ausgebe und welche Caption sie haben sollen. (Immer so zwischen 5 und 10 Stück).
    Das ganze mit

    if (.....)
    
    ...
    else
    

    erscheint mir total unpraktisch.
    Wie kann ichs besser machen?

    danke tho.



  • Da du nicht sagst, nach welcher Logik das entschieden wird, kann man da nicht viel zu sagen. 🙄

    Ich würde es erstmal doch mit ifs machen und dann gucken, ob und wo sich ein Muster erkennen lässt.



  • Die Logik ist einfach:
    es werden vorhande CORBA Clients gescannt. Je nachdem wie viele gerade existieren, sollen deren Namen gezeigt werden. Das kann immer variieren.



  • Da bietet sich doch eine Schleife an. 🙂



  • estartu schrieb:

    Da bietet sich doch eine Schleife an. 🙂

    ... und genau da liegt mein Problem.
    Angenommen ich habe 5 Elemente.
    Ich setze auf meinen Dialog max. 20 Radiobuttons, von denen dann 5 enabled mit der korrecten Caption sein sollen, 15 disabled mit Caption "--".
    Nun hat jeder Radiobutton eine Feste ID (bsp. ID_RADIO_0 bis ID_RADIO_19).
    Wenn ich das per Schleife lösen soll, wie kann das aussehen?

    for (int i=0; i < VorhandeneElemente; i++)
    {
    // und hier kommt das Problem (nur im Prinzip dargestellt)
    
    //EnableWindow oder SetWindowText() in Abhängigkeit von ID_RADIO_xy,
    //wobei ID_RADIO_xy wieder fest sind und sich nicht mit VorhandeneElemente in 
    //der Schleife verbinden lassen
    


  • Um eine Schleife über die Radiobuttons zu machen gibt es zwei Möglichkeiten:

    1. Du änderst die Nummern in der Resource.h so, dass die Radiobuttons aufsteigend hintereinander liegen.
    Pass auf, dass keine Nummer doppelt ist.

    Dann kannst du die Schleife so machen:

    int nRadio = IDC_RADIO_0;
    CWnd pRadio = NULL;
    for (int i = 0; nRadio <= IDC_RADIO_20; i++, nRadio++)
    {
        pRadio = GetDlgItem(nRadio);
    
        if (i < VorhandeneElemente)
        {
            pRadio->SetWindowText(strDasWasAngezeigtWerdenSoll);
            pRadio->EnableWindow(TRUE);
        }
        else
        {
            pRadio->SetWindowText("--");
            pRadio->EnableWindow(FALSE);
        }
    }
    

    Das ist ungetestet, aber müsste gehen.

    2. Du packst die IDs in ein Array und legst die Schleife da drüber.

    Okay? 🙂



  • Prima - das iss es!
    Vielen Dank!
    Klar - hinter den IDC_... stecken ja nix anderes als #defines.
    Die Idee mit dem Array ist auch super! 🙂


Anmelden zum Antworten