MFC: Kombinationsfeld

  • #1
D

Der Hannes

Guest
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.
 
Thema:

MFC: Kombinationsfeld

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben