none
Visual Studio 2008 C# Ausgewähltes Element aus ComboBox in TextBox RRS feed

  • Frage

  • Hallo Leute,

    ich habe folgendes Problem: Ich habe mit Windows Forms ein Fenster mit verschiedenen RadioButtons und einer TextBox, wenn ich einen RadioButton auswähle geht eine neue Windows Form auf mit einer ComboBox mit mehreren verschieden Elementen zum auswählen. Nun hätte ich gerne dass das ausgewählte Element aus der ComboBox in der TextBox des anderen Fensters angezeigt wird wenn ich das Fenster mit der ComboBox wieder schließe.

    Wäre sehr dankbar wenn jemand ne gute Idee hat. Vielen Dank schon mal im Vorraus!!! Mfg John

    Mittwoch, 4. September 2013 08:00

Antworten

  • Ich habe jetzt einfach eine Kopie des Ordners erstellt und jetzt funktioniert es auf ein mal einwandfrei, ist zwar komisch aber es klappt :)

    Vielen Dank für die Hilfe!!!!

    • Als Antwort markiert Johnson90 Mittwoch, 11. September 2013 07:37
    Freitag, 6. September 2013 07:28

Alle Antworten

  • Hallo Leute,

    ich habe folgendes Problem: Ich habe mit Windows Forms ein Fenster mit verschiedenen RadioButtons und einer TextBox, wenn ich einen RadioButton auswähle geht eine neue Windows Form auf mit einer ComboBox mit mehreren verschieden Elementen zum auswählen. Nun hätte ich gerne dass das ausgewählte Element aus der ComboBox in der TextBox des anderen Fensters angezeigt wird wenn ich das Fenster mit der ComboBox wieder schließe.

    Wäre sehr dankbar wenn jemand ne gute Idee hat. Vielen Dank schon mal im Vorraus!!! Mfg John

    Mittwoch, 4. September 2013 07:55
  • Hi Johnson,

    die einfachste Möglichkeit ist eine Public Property in der Form Bereit zu stellen, welches du nach dem Schließen der Form abfragst. 

    Grundlegend sollte man aber Daten(Model) und Darstellung(View) trennen, hier gibt es z.B. das MVVM Pattern.

    Siehe Link.

    MFG

    Björn

    Mittwoch, 4. September 2013 08:40
  • na so in der art:

    Form2 f2 = new Form2();

    f2.ShowDialog();

    textbox = f2.ComboBox.SelectedItem.Text;

    Combobox muß halt public sein.

    Mittwoch, 4. September 2013 08:41
  •  Danke schon mal, aber jetzt kommt die Meldung dass die TextBox im aktuellen Kontext nicht vorhanden is obwohl sie es eigentlich sein müsste...  und .Text konnte nicht als Erweiterungsmethode gefunden werden?!?! SelectedIndexChanged ist schon richtig oder?

    private void ComboBox_SelectedIndexChanged(objekt sender, EventArgs e)   ?!

    Danke nochmals

    Mittwoch, 4. September 2013 09:17
  • sorry, da war ich wohl etwas zu oberflächlich das heißt:

    textbox.Text = f2.ComboBox.SelectedItem.ToString()

    :)

    der code sollte in der ersten form stehen und wird naürlich erst nach schliessen der 2. form angezeigt.

    Mittwoch, 4. September 2013 09:41
  • Hi,

    für mich kling es jetzt so als ob du in Form2 auf die Textbox von Form1 zugreifen willst. Das klappt nicht.

    Ich hab dir jetzt mal ein einfaches Beispiel gebastelt.

    public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
            public string SelectedValue { get; set; }
    
            private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                SelectedValue = comboBox1.SelectedValue.ToString();
            }
    }
    
    
    
    
    
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                var form2 = new Form2();
                form2.ShowDialog();
    
                textBox1.Text = form2.SelectedValue;
            }
    
           
        }

    Der Wert wird erst nach dem Schließen der 2. Form in die Textbox von Form1 übernommen.

    Die Combobox solltest du nicht nach außen hin sichtbar machen. Da dadurch Abhängigkeiten zur Combox entstehen.  Und du so später z.B. die Combox nicht gegen ein Textfeld austauschen kannst.

    MFG

    Björn

    • Als Antwort vorgeschlagen Dennis Becker Freitag, 6. September 2013 11:53
    Mittwoch, 4. September 2013 09:44
  • Gehen tut es schon auf die Textbox der ersten Form zuzugreifen.

    namespace WindowsFormsTest
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
    
            }
    
            private void radioButton1_CheckedChanged(object sender, EventArgs e)
            {
                if (radioButton1.Checked)
                {
                    Form2 f2 = new Form2(ref textBox1 );
    
                    f2.ShowDialog(  );
                }
            }
        }
    }
    
    namespace WindowsFormsTest
    {
        public partial class Form2 : Form
        {
            TextBox tbform1;
    
    
            public Form2()
            {
                InitializeComponent();
            }
            public Form2( ref  TextBox tb  )
            {
    
                tbform1 = tb;
    
                InitializeComponent();
            }
    
            private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                tbform1.Text = comboBox1.SelectedItem.ToString();
    
            }
        }
    }
    

    • Als Antwort vorgeschlagen Dennis Becker Freitag, 6. September 2013 11:53
    Mittwoch, 4. September 2013 10:00
  • Super es funktionieren beide Varianten. Vielen vielen Dank für die schnelle Hilfe :)
    Mittwoch, 4. September 2013 12:00
  • Eine letzte Sache wäre da doch noch, sobald ich ein anderes Element in der ComboBox auswähle wird der RadioButton auf ein mal "Unchecked". Der Text wird aber in der TextBox angezeigt :) .Bekomme es nicht hin dass er grün, also "checked" bleibt wenn ich ein anderes element auswähle?!?!
    Mittwoch, 4. September 2013 13:02
  • Hi ich weiß nicht genau was du meinst, bei mir bleibt er gecheckt.

    Kannst du da mal denn Passenden Quellcode zeigen.

    Und benutzt du irgendwo ein Event der Textbox?

    MFG
    Björn

    Mittwoch, 4. September 2013 13:15
  • public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void radioButton1_Click(object sender, EventArgs e) { if (radioButton1.Checked) { Form1 f2 = new Form1(ref TextBox ); f2.ShowDialog(); } }

    public partial class Form2 : Form { TextBox tbform2; public Form2() { InitializeComponent(); } public Form2( ref TextBox tb ) { tbform2 = tb; InitializeComponent(); } private void ComboBox_SelectedIndexChanged(object sender, EventArgs e) { tbform2.Text = ComboBox.SelectedItem.ToString(); } } }

    Hey Björn ich habe cats Version benutzt da bei deiner leider jedes mal eine Fehlermeldung kommt. Aber das Problem mit dem RadioButton habe ich noch nicht lösen können. Wie gesagt sobald ich aus der ComboBox ein Element auswähle wird dieser Unchecked. Wäre super wenn ihr mir nochmal weiterhelfen könntet :-)
    Donnerstag, 5. September 2013 06:25
  • Und die Fehlermeldung bei deiner Version Björn lautet "NullReferenceException ist aufgeten"  ?!
    Donnerstag, 5. September 2013 06:34
  • public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void radioButton1_Click(object sender, EventArgs e) { if (radioButton1.Checked) { Form1 f2 = new Form1(ref TextBox ); <- richtiger Name übergeben f2.ShowDialog(); } }



    du übergibst auch die richtige textbox an die form 2?
    Donnerstag, 5. September 2013 09:27
  • Hi Johnson,

    ich hatte bei mir eine Liste gebunden.

    Probiere mal SelectedItem anstelle von SelectedValue.

    Die Textbox zu übergeben ist übrigens keine gute Idee. Form2 kann dann alle Eigenschaften der Textbox ändern und z.B. ein Event der Textbox verwenden. Was zu Speicher Leeks führen kann.

    MFG

    Björn 

    Donnerstag, 5. September 2013 12:19
  • Ich habe jetzt einfach eine Kopie des Ordners erstellt und jetzt funktioniert es auf ein mal einwandfrei, ist zwar komisch aber es klappt :)

    Vielen Dank für die Hilfe!!!!

    • Als Antwort markiert Johnson90 Mittwoch, 11. September 2013 07:37
    Freitag, 6. September 2013 07:28