wxNotebook -> Falsches tab wird bearbeitet.



  • Ich habe eine Klasse MyTabList welche von wxNotebook abgeleitet ist. Jedes Tab enthält eine Klasse MyTextArea welche von wxTextCtrl abgeleitet ist.

    Die Tabs werden wie folgt hinzugeüft:

    void MyTabList::OpenFile(wxString Filename)
    {
       AddPage(new MyTextArea(this), Filename, true);
    }
    

    Jetzt mache ich in der MyTextArea Klasse ein Syntax Highlighting. Das klappt auch mit einem Tab. Nur wenn ich mehrer Tabs habe, wird immer das letzte Tab, ob es aktiviert ist oder nicht, berarebeitet. Ich genutz das KeyEvent zu Abfrage der Änderung:

    void MyTextArea::OnKeyUp(wxKeyEvent& event)
    {
        if(!event.ShiftDown()) {
    	if(event.GetKeyCode() == WXK_SPACE) {
    	    long cursor = GetInsertionPoint();
    
    	    wxString text = GetValue();
    
    	    Clear();
    
    	    int pos = text.Find(" int ");
    
    	    while(pos != -1) {
    
    		std::cout <<  text.SubString(0,pos-1).c_str();       
    
    		SetDefaultStyle(wxTextAttr(*wxBLUE));
    		std::cout << "int";
    		SetDefaultStyle(wxTextAttr(*wxBLACK));
    
    		text = text.SubString(pos+3,text.Length());
    		pos = text.First(" int ");
    	    }
    
    	    std::cout << text.c_str();
    
    	    SetInsertionPoint(cursor);
    	}
        }
    
    }
    

    Woran liegt das? Warum wird immer das letzte Tab in der Liste bearbeitet auch wenn ich im ersten zB Schreibe.

    Mein Konstruktor für die MyTextArea Klasse sieht wie folgt aus:

    MyTextArea::MyTextArea(wxWindow *parent) 
        : wxTextCtrl(parent,1000,"", wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER | wxTE_PROCESS_TAB | wxTE_MULTILINE, wxDefaultValidator, wxTextCtrlNameStr)
    {
        std::cout.rdbuf(this);
    }
    

    Liegt es vllt daran dass ich für alle TextArea die ID 1000 habe?

    Danke für eure Hilfe


  • Mod

    Ich denke es liegt daran das alle die selbe ID haben, abhilfe könnte hier wxNewId() schaffen.



  • Hey,

    da sucht man paar Stunden das Problem, postet es und 1 Minute später findet man es.

    Es lag daran, dass ich std::cout umgeleitet habe und immer << als AppendText ersetzt verwendet habe.

    Da aber cout nur auf ein Textfeld umleiten kann, war es immer das letzte ^^

    Mit der ID habe ich nämlich direkt mal getestet, aber das ist es nicht. Die TextAreas können die gleiche ID haben. Nur das cout kann ich net umleiten.

    *CLOSED*


Anmelden zum Antworten