Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
2 WPF Fenster -> Daten zwischen Fenster nutzen ?
cybermailer
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

2 WPF Fenster -> Daten zwischen Fenster nutzen ?

beantworten | zitieren | melden

Hallo habe ein kleines Projekt:

Fenster 1 -> Zeigt einen Istzustand gewisse Werte

Buttons: Werte hinzufügen, löschen, Ändern

Fenster 2 ->

Dort wird der Wert hinzugefügt, oder geändert

Dh. die Daten müssen von F1 -> F2 gehen und retour.


CODE:

Fenster 1 C#

private void Button_Click(object sender, RoutedEventArgs e)
        {
            

            Button but = sender as Button;
            TreeViewItem tvi = (TreeViewItem)treeView1.SelectedItem;
            
            switch (but.Name)
            {
                case "Button_Hinzufügen":
                    TreeViewItem child = new TreeViewItem();

                    add hinzufuegen_fenster = new add();
                    hinzufuegen_fenster.Owner = this;
                    hinzufuegen_fenster.WindowStartupLocation = WindowStartupLocation.CenterOwner;
                    hinzufuegen_fenster.ShowDialog();
                    
                    child.Header = bezeichnung;

                    tvi.Items.Add(child);
                    tvi.IsExpanded = true; // expand to show new child element
                    break;

                case "Button_Entfernen":
                    if (tvi != treeView1.Items.GetItemAt(0)) // remove only if not root
                    {
                        ((TreeViewItem)tvi.Parent).Items.Remove(tvi);
                    }
                    break;
                case "Button_Aendern":
                    tvi.Header = tvi.Header.ToString() + "C";
                    break;
            }

        }

Fenster 1 XAML
<DockPanel Name="dockpanelanzeige" LastChildFill="True">
        <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal">
            <Button Name="Button_Hinzufügen" Click="Button_Click" Margin="3">Hinzufügen</Button>
            <Button Name="Button_Aendern" Click="Button_Click" Margin="3">Ändern</Button>
            <Button Name="Button_Entfernen" Click="Button_Click" Margin="3">Entfernen</Button>
        </StackPanel>
        <TreeView Name="treeView1">
            <TreeViewItem Name="treeViewItem1" Header="Root"/>
            
        </TreeView>        
    </DockPanel>

Im Fenster 2 C#

public add()
        {
            InitializeComponent();
        }

        string bezeichnung;

        private void speichern_Click(object sender, RoutedEventArgs e)
        {
            bezeichnung = textbox_bezeichnung.Text;
            Close();
        }

Fenster 2 XAML
<DockPanel>
        <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal">
            <Button Name="speichern" Margin="3" Click="speichern_Click">Speichern</Button>
            <Button Name="abbrechen" Margin="3" Click="abbrechen_Click">Abbrechen</Button>
            
        </StackPanel>
        <StackPanel>
            <Label Content="Bezeichnung eingeben:"></Label>
            <TextBox Height="23" Name="textbox_bezeichnung" Width="220" />
        </StackPanel>
    </DockPanel>

Was wäre die simplste herangehensweise dass ich die Variable bezeichnung vom Fenster 1 zu 2 und umgekehrt bekommen?

Danke für Eure Hilfe.
private Nachricht | Beiträge des Benutzers
michlG
myCSharp.de - Experte

Avatar #avatar-2909.png


Dabei seit:
Beiträge: 3.430
Herkunft: Naturns - Südtirol - Italien

beantworten | zitieren | melden

Hallo cybermailer,

siehe => [FAQ] Kommunikation von 2 Forms

Grüße
Michael
private Nachricht | Beiträge des Benutzers
cybermailer
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

danke für die info, hab mir diese bereits angesehen die ist für mich einwenig overkill.

Ich möchte ja nur dass der String vom Popup Fenster (welcher in einer TextBox) eingegeben wird zurückkommt. Damit ich diesen verwenden kann im 1. Fenster.

Gibt es da eine Möglichkeit?

---> Lösung gefunden

Fenster 1 -> Objekt an Fenster 2 übergeben.

z.b. bei Label:

im Fenster 1:

add neues_fenster = new add(label1);
            neues_fenster.Owner = this;
            neues_fenster.WindowStartupLocation = WindowStartupLocation.CenterOwner;
            neues_fenster.ShowDialog();

im Fenster 2:

private Label labelFromMainWindow;
       
        public add(Label _label)
        {
            InitializeComponent();
            labelFromMainWindow = _label;
        }

Reicht vollkommen für meine Zwecke aus...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von cybermailer am .
private Nachricht | Beiträge des Benutzers
ujr
myCSharp.de - Experte



Dabei seit:
Beiträge: 1.688

beantworten | zitieren | melden

Zitat von cybermailer
---> Lösung gefunden

Ich hätte es jetzt Frickelei genannt. Es ist einfach ungünstig, solche wechselseitigen Abhängigkeiten einzubauen. Was machst Du z. B., wenn Du unterschiedliche Label oder Textboxen aktualisieren willst?
Eine deutlich bessere Alternative zeigt die :rtfm: zu ShowDialog.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo ujr,

ShowDialog führt zu modalen Fenstern und das ist nicht mehr Stand der Kunst. Das brauchen wir aber hier nicht zu besprechen, denn das wurde schon ausführlich in Warten auf Schließen einer anderen Form [und warum man Dialoge nicht modal machen sollte] besprochen.


Hallo cybermailer,

ebenso, wie die Form2-Form1-Thematik generell. Die von dir gewählte Lösung ist - wie ujr gesagt hat - schlecht. Bessere Lösungen werden in der FAQ genannt. Du musst dich nur darauf einlassen.

Beachte bitte [Hinweis] Wie poste ich richtig? Punkt 1.1 und 1.1.1.

Dass die FAQ sich hauptsächlich auf Windows Forms bezieht, spielt keine Rolle, weil die Prinzipien der Kommunikation von Fenstern in WPF die gleichen sind.

herbivore
private Nachricht | Beiträge des Benutzers