MFC: Kombinationsfeld

Dieses Thema MFC: Kombinationsfeld im Forum "Windows XP Forum" wurde erstellt von Der Hannes, 2. März 2006.

Thema: MFC: Kombinationsfeld Hi! Weiß zufällig irgendjemand, wie man bei einem Kombinationsfeld einzelne Listenelemente ausblenden oder...

  1. Hi!
    Weiß zufällig irgendjemand, wie man bei einem Kombinationsfeld einzelne Listenelemente ausblenden oder wenigstens deaktivieren kann?

    z.B. :
    ich hab 3 Kombinationsfelder mit den Elementen
    -Deutsch
    -Mathe
    -Englisch

    und wenn ich jetzt im 1. Kombinationsfeld -Deutsch auswähle, soll man im 2. und 3. Kombinationsfeld nur noch -Mathe und -Englisch auswählen können und -Deutsch soll halt entweder deaktiviert oder ausgeblendet werden.

    Wäre super nett, wenn mir da jemand helfen könnte
    MFG
     
  2. Ausblenden/Deaktivieren geht nicht (bzw. nur sehr aufwändig).
    Kannst Du nicht die entsprechenden Einträge löschen? Du könntest von CComboBox eine Klasse ableiten und darin die Logik zum Verstecken/Zeigen unterbringen. Die temporär entfernten Elemente könnte man in einer Liste ablegen. Natürlich musst Du dann dann immer sowohl in dieser Liste als auch in der Combobox suchen/entfernen etc.

    Also so in der Art (als möglicher Ansatz; ohne Implementation):

    class CExtendedComboBox : CComboBox {
    private:
      struct Element {
        Element(const CString& _text, int _pos, DWORD_PTR _itemData = NULL) :
          text(_text), pos(_pos), itemData(_itemData) {};
        CString text;
        int pos; // Index beim Entfernen
        DWORD_PTR itemData;
      };
      friend BOOL AFXAPI CompareElements(const Element*, const Element*);
      CList<Element*, Element*> hiddenElements;
      Element* getFromList(const CString& txt);
      POSITION findInList(const CString& txt);
      bool removeFromList(const CString& txt);

    public:
      bool HideElement(const CString& txt);
      bool UnhideElement(const CString& txt);

      // In diesen Methoden jeweils die Combobox *und* die Liste berücksichtigen
      bool Contains(const CString& txt);
      bool Get(CString& txt, DWORD_PTR& itemData, int& index, bool& hidden);
      bool Add(const CString& txt, DWORD_PTR itemData = NULL, int targetIndex = -1);
      bool Remove(const CString& txt);

      CExtendedComboBox(...) : CComboBox(...) ...
      ~CExtendedComboBox(); // Liste löschen
    };

    Das dürfte einfacher sein als bei der Combobox mit Owner-Draw, Umbiegen von Maus- und Tastatur-Ereignissen und zig Eventualitäten (und vorhandenen Bugs) rumzuhampeln.

    // Edit: Wenn Du damit nicht zurechtkommst, kann ich das am Wochenende mal genauer ausarbeiten.
     
Die Seite wird geladen...

MFC: Kombinationsfeld - Ähnliche Themen

Forum Datum
wert eines arrays über den index eines kombinationsfeldes abfragen Webentwicklung, Hosting & Programmierung 14. Nov. 2007
ACCESS: Standardeintrag im Kombinationsfeld Windows XP Forum 13. Juli 2005
Kombinationsfeld in OOo anlegen? StarOffice, OpenOffice und LibreOffice 6. Juli 2005
acces abfrage über kombinationsfeld Windows XP Forum 9. Apr. 2005
Excel - Kombinationsfeld Windows XP Forum 10. März 2005