Toon posts:

[VC++] Overdracht gegevens tussen dialgs.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Wanneer ik vanuit het maindlg een nieuwe modal dlg met een listbox maak, wil ik na afloop de gegevens die hier in een listbox staan kopieren naar een listbox in de maindlg.

Echter is de listbox dan niet meer toegangkelijk.

C++:
1
2
3
4
5
6
CModalDlg Dlg;
if (Dlg.Domodal()==IDOK)
{
    int i = m_list2.GetCount();      //assertion error
    m_list1.AddString(list2.GetDataItem(0)); //assertion error
}


(Een string uit een editbox ophalen gaat wel zo)

Een modeless dlg heeft weer als nadeel dat je terug kunt naar het maindlg en dat is niet de bedoeling.

Ik heb gegeken naar DDX/DDV routines maar die zijn volgens mij alleen voor uitwisseling tussen de dlg klasse en de controls.

Tot slot zou ik nog een modeless listbox kunnen maken en die zo wel op het maindlg als op het modal dlg kunnen gebruiken, maar ik zou graag eerst weten of er niets anders mogelijk is.

  • Quitter3
  • Registratie: Januari 2001
  • Laatst online: 13-02 16:30
Volgens mij kan het wel zo:

int i = Dlg.m_list2.GetCount();
m_list1.AddAstring(Dlg.m_list2.GetDataItem(0));

Weet het niet zeker. C++ is al een tijdje geleden voor mij.

  • whoami
  • Registratie: December 2000
  • Laatst online: 24-08 16:37
Maak op het 2de scherm een functie-pointer variable aan.

Bij de creatie van het 2de scherm, dan ga je die functie-pointer laten wijzen naar een functie op jouw eerste scherm.
Als er op 'Ok' geklikt wordt op het 2de scherm, dan ga je de functie waar die functie-pointer naar verwijst laten uitvoeren.

https://fgheysels.github.io/


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Zoals je al aangaf kun je niet meer bij de listbox omdat de dialog al opgeruimd is. Je moet dus niet de listbox zelf bij houden, maar de inhoud van de listbox. Als je bij OnOk () gewoon de inhoud van de listbox in een std::vector gooit, wat je ook als public member aanmaakt, dan kan de gebruiker van je dialog gewoon die std::vector gebruiken om de data eruit te halen

De oplossing van whoami kan natuurlijk ook, maar lijkt me minder mooi, aangezien de gebruiker van je dialog dan zelf de data eruit moet halen, en dus kennis moet hebben van de control waar de data in staat

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • The End
  • Registratie: Maart 2000
  • Nu online

The End

!Beginning

Ik maak altijd mijn eigen DoModal 'wrapper'.
Zoiets als dit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int MyDialog::DoMyModal(DWORD &InOutValueToSetOrEdit)
{
      int ReturnValue = 0;
      ValueToSetOrEdit = InOutValueToSetOrEdit; // ValueToSetOrEdit is protected/private member van het dialog
      if((ReturnValue = DoModal()) == IDOK)
      {
            InOutValueToSetOrEdit = ValueToSetOrEdit;
      }
      return ReturnValue;
}

int MyDialog::OnOk()
{
     ValueToSetOrEdit = MyList.GetItemCount(); //Haal iets op uit de dailog controlls.
     CDialog::OnOK();
}


Je kan natuurlijk ook pointers naar objecten meegeven o.i.d.

  • whoami
  • Registratie: December 2000
  • Laatst online: 24-08 16:37
.oisyn schreef op 03 februari 2003 @ 14:02:

De oplossing van whoami kan natuurlijk ook, maar lijkt me minder mooi, aangezien de gebruiker van je dialog dan zelf de data eruit moet halen, en dus kennis moet hebben van de control waar de data in staat
Aan de andere kan kan je wel die dialog hergebruiken op een andere form. Als de dialog kennis heeft van de form die hem geopend heeft, dan heb je die flexibiliteit niet meer.

https://fgheysels.github.io/


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

whoami: de dialog kent de form in mijn voorbeeld ook niet, hij gooit z'n data in een eigen public member, die behouden blijft nadat de dialog is opgeruimd

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Bedankt voor de reacties. Ik ga ze eens proberen.
Pagina: 1