Übergabe und Anzeige ComboBox



  • Hallo,

    ich hätte nur mal gern eure Meinung gehört, ich habe 2 Dialoge und ich lese aus
    dem ersten eine Variable aus, die ich dann im zweiten in einer ComboBox
    anzeigen lasse. Die ComboBox wird beim initalisieren des zweiten Dialogs mit
    allen Werten vorbelegt, ich möchte eben nur das es dann die richtige Variable
    anzeigt, das funktioniert auch alles tadellos.
    Jetzt wollte ich nur mal gerne wissen ob es die originellste Methode ist, oder
    ob es eine besser Möglichkeit gibt.

    MfG

    // Übergibt das Kennzeichen aus Datenbank in die ComboBox des Rechnungsdialoges
    pRechnung->m_strAuswahlZeichen.Insert(IDC_EZEICHEN, m_strZeichen);
    pRechnung->m_ctlAuswahlZeichen.SelectString(-1, pRechnung->m_strAuswahlZeichen);



  • So nun gerade nicht! Stell Dir folgendes vor:

    Chef:
    - gib Arbeiter Hammer in die rechte Hand
    - gib Arbeiter Nagel in die linke Hand
    - gib Arbeiter Befehl, Nagel in die Wand zu hauen

    Wird das ganze praktischerweise so gehandhabt? Nein, sondern so:
    Chef:
    - Arbeiter, Hammer und Nagel liegen dort, tue damit dies und das!

    Somit kann es dem Chef egal sein, ob der Arbeiter nun Links- oder Rechtshänder ist!

    angewandtes Bsp.:

    void CRechnungDlg::UpdateRechnung( CString strZeichen)
    {
      m_strAuswahlZeichen.Insert( IDC_EZEICHEN, strZeichen);
      m_ctlAuswahlZeichen.SelectString( -1, m_strAuswahlZeichen);
    }
    // Aufruf mit:
    CRechnungDlg* pRechnung = ...;
    pRechnung->UpdateRechnung( m_strZeichen);
    


  • Nachtrag:
    Vielleicht fragst Du jetzt, warum die Methode besser ist, weil sie doch mehr Schreibarbeit bedeutet.
    Also
    1. Bessere Trennung der Objekte
    2. Kapselung der Membervariablen -> kein Zugriff von aussen
    3. Parameter können innerhalb der Funktion auf Gültigkeit überprüft werden
    Fazit: bessere objektorientierte Programmierung



  • Hi,

    ich übergebe aber noch weitere Werte, dies passiert alles bei einem Klick
    auf einen Button. Soll ich da die gesamte Übergabe aller Werte in eine
    eigene Funktion schreiben.

    MfG



  • Nachtrag:
    ich poste am besten mal den gesamten Code:
    void CDatenbankDlg::OnBrechnung()
    {
    CRechnungDlg* pRechnung = new CRechnungDlg;

    pRechnung->Create(IDD_RECHNUNG);
    pRechnung->ShowWindow(SW_SHOW);

    // Übergibt Daten aus DatenbankDlg an den RechnungDlg
    pRechnung->m_strAuswahlZeichen.Insert(0, m_strZeichen);
    pRechnung->m_ctlAuswahlZeichen.SelectString(-1, pRechnung->m_strAuswahlZeichen);
    // Name
    pRechnung->m_strName.Insert(0, m_strName);
    pRechnung->m_ctlName.SetWindowText(pRechnung->m_strName);
    // Vorname
    pRechnung->m_strVorname.Insert(0, m_strVorname);
    pRechnung->m_ctlVorname.SetWindowText(pRechnung->m_strVorname);
    // Anschrift
    pRechnung->m_strAnschrift.Insert(0, m_strAnschrift);
    pRechnung->m_ctlAnschrift.SetWindowText(pRechnung->m_strAnschrift);
    // Wohnort
    pRechnung->m_strOrt.Insert(0, m_strOrt);
    pRechnung->m_ctlOrt.SetWindowText(pRechnung->m_strOrt);
    UpdateData(FALSE);
    }



  • Also, bitte Code-Tags nutzen

    void CDatenbankDlg::OnBrechnung() 
    {
      CRechnungDlg* pRechnung = new CRechnungDlg;
      pRechnung->Create(IDD_RECHNUNG);
      pRechnung->ShowWindow(SW_SHOW);
      // Übergibt Daten aus DatenbankDlg an den RechnungDlg
      pRechnung->Update( m_strZeichen, m_strName, m_strVorname, m_strAnschrift, m_strOrt);
    }
    
    void CRechnungDlg::Update( CString strZeichen, CString strName, CString strVN, CString strAnschrift, CString strOrt)
    {
      m_strAuswahlZeichen.Insert( 0, strZeichen);
      m_ctlAuswahlZeichen.SelectString( -1, m_strAuswahlZeichen);
      // Name
      m_strName.Insert( 0, strName);
      m_ctlName.SetWindowText( strName);
      // Vorname
      m_strVorname.Insert( 0, strVN);
      m_ctlVorname.SetWindowText( strVN);
      // Anschrift
      m_strAnschrift.Insert( 0, strAnschrift);
      m_ctlAnschrift.SetWindowText( strAnschrift);
      // Wohnort
      m_strOrt.Insert( 0, strOrt);
      m_ctlOrt.SetWindowText( strOrt);
      UpdateData(FALSE);
    }
    


  • Alles klar und vielen Dank für Deine Antwort!

    MfG


Anmelden zum Antworten