TabControl erzeugen



  • Und was ist wenn man den Dialog aber Modal haben will.
    Habe bei mir das Destroy window rausgenommen. Aber wenn ich InsertItem mache. schlägt das Create fehl.



  • Weil die Controls nicht enabled sind? Weil ein anderes Fenster im Vordergrund liegt?

    Controlls sind enabled. Und normalerweise sollte kein anderes Fenster im Vordergrund sein. Aber wo sehe ich das im Spy++


  • Mod

    Wenn Du auf Fensterauswahl gehst und über die Controls drüber hoverst.



  • Ja das geht. Das heißt es liegt kein Fenster darüber. Woran liegts dann?



  • Und wie muss man die Klasse DynTabCtrl umbauen dass es für modale Dialoge auch geht?



  • Das gibt es doch nicht.

    Habe mir die Klasse DynTabCtrl heruntergeladen und bin genau nach Anleitung vorgegangen. Es wird alles angezeigt, aber die Controlls lassen sich einfach nicht bedienen.



  • Oh Sorry. Habs rausbekommen. Habe als Vorlage Propertysheets genommen für meine Dialoge die sind standardmässig deaktiviert. Wieso auch immer. Habe nur auf die einzelnen Controlls geschaut.

    Jetzt stellt sich für mich aber auch noch die Frage: Geht das ganze auch für Modale Dialoge?



  • na sicher geht das auch auf modalen Dialogen, steht zumindest nix im Weg, ist doch ne abgeleitete Klasse von CTabCtrl die geht doch auch auf Modalen Dialogen



  • Ja aber wann rufe ich dann InsertItem auf. Im Konstruktor gehts nicht und in OnInitDialog geht auch nicht da die Methode ja öfters aufgerufen wird.



  • Und wie geht das nun?



  • wieso OnInitDialog wird doch nur einmal für das Initialisieren des Dialogs aufgerufen. Bei mir wurde die noch nie 2 mal aufgerufen, oder du hast ein Design-Fehler in deinem Programm



  • OnInitDialog wird bei jedem .DoModal aufruf aufgerufen. Oder etwa nicht?


  • Mod

    Schreiber A schrieb:

    OnInitDialog wird bei jedem .DoModal aufruf aufgerufen. Oder etwa nicht?

    Aber wenn DoModal das nächste mal aufgerufen wird, dann ist doch das List Control leer...
    Was soll dieser Einwand?



  • Aber wenn DoModal das nächste mal aufgerufen wird, dann ist doch das List Control leer...

    Ja eben nicht. Das Controll ist ja ein Member der Klasse. Und nach dem DoModal und schliessen des Dialogs ist das Controll immer noch vorhanden. Und der der Inhalt ist nicht leer.



  • Dann hast du sicher deine Klasse mit new() erzeugt und ncht wieder gelöscht. Erstell die auf den Stack und dann ist die auch beim nächsten Aufruf nicht Initialisiert, oder lösch die Klasse mit Delete() wenn DoModal beendet wurde.



  • Ich habe die Klasse auch wiederum als member angelegt. Damit ich nach schliessen des Dialogs Zugriff habe auf die Daten des Dialogs.



  • Du hast das Prinzip nicht Verstanden mit Dialogen umzugehen. Du erzeugst den Dialog auf dem Stack, setzt falls vorhanden Membervariablen des Dialoges. Dann Rufst du DoModal() auf. Wird DoModal mit IDOK beendet liesst du die werte aus den Membervariablen des Dialoges wieder aus und beendest deine Funktion, damit wird auch das Objekt des Dialoges auf dem Stack gelöscht.

    Wenn du das anders machen willst bitte, aber Treffe dann zumindest die entsprechenden Vorkehrungen und behaupte nicht einfach das was nicht geht, wenn du das anders benutzt als wie gedacht kann das ja auch nicht fuzzen.

    Simpelster fall di spendierst deiner Dialogklasse ne variable (BOOL)und setzt die beim ersten mal ausführen der onIni auf TRUE, bei jedem weiteren aufruf sollte nix mehr in der OnInit laufen weil du alles mit einer if auf die Variable überspringst.

    Aber wie gesagt, mach es wie es eigentlich gedacht ist, spaart dir viel ärger.



  • Du hast das Prinzip nicht Verstanden mit Dialogen umzugehen. ... Wenn du das anders machen willst bitte

    Ok dann habe ich das Prinzip nicht verstanden. Das Problem ist aber das ich dieses Prinzip noch nirgends gelesen habe. Drum bin ich davon ausgegangen dass ich es richtig mache.



  • Ok zum das Prinzip richtig zu verstehen. Das mache ich aber nur bei modalen Dialogen. Bei nicht modalen Dialogen darf ich direkt auf die Variablen im Dialog zugreifen. Ohne dass ich sie beim schliessen des Dialogs noch irgendwie speichern muss. Richtig?



  • Du darfst immer vor und nach DoModal/Create auf die Variablen zugreifen, ist doch nur die frage was der dialog für aufgaben hat, bei DoModal sollen meist irgendwelche einstellungen oder so was gemacht da ist es ja dumm wenn man was anderes machen könnte, bei Create soll er ja neben dem Hauptdialog laufen und was machen was zur laufzeit des Hauptdiloges gebraucht wird. Also kommt das doch nur drauf an was der dialog für aufgaben hat und wie du die umsetzt, manchmal braucht der auch gar keine Variablen, weil der nur Butten hat und diese Senden User-Messages an den Hauptdialog.

    aber sei wie es sei, wenn du einen Dialog hast wo die OnInit mehrfach durchlaufen wird, dann hast du einen fehler gemacht.


Anmelden zum Antworten