Laden...

Combobox Wert hinter Namen in einer Textbox ausgeben

Erstellt von karl_heinz vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.803 Views
K
karl_heinz Themenstarter:in
5 Beiträge seit 2015
vor 8 Jahren
Combobox Wert hinter Namen in einer Textbox ausgeben

Grüßt euch,

ich bin gerade ein wenig am rumprobieren, wie ich das Problem lösen kann.
Ich will über ein Dropdown Menü über einen Namen etwas auswählen wohinter sich zum weiteren rechnen ein Faktor befindet, der mir in einer Textbox zur Kontrolle ausgegeben werden soll und ich so den Wert der Textbox wieder rum nehmen möchte um damit weiter zu rechnen.

Die werde müssen nur einmal eingegeben werden und bleiben dann so fest, daher muss ich nix in ein Array einlesen oder so.

Hier mal gekürzt das was ich habe. Leider bekomme ich nur den Text ausgegeben und nicht den Wert.

Dabei würde ich mich über eure Hilfe freuen, da ich mich hier festgebissen haben.


   public partial class Form1 : Form
    {
        Binding bining;
        private class Item
        {
            public string Name;
            public double VMDWert;
            public Item(string name, double vmdwert)
            {
                Name = name; VMDWert = vmdwert;
            }
            public override string ToString()
            {
                return Name;
            }
        }

        public Form1()
        {
            InitializeComponent();


            comboBox1.Items.Add(new Item[" Test 1", 0.09260));
            comboBox1.Items.Add(new Item(" Test 2", 0.06555));

           
           bining = new Binding("Text",comboBox1, "Text");
            textbox1.DataBindings.Add(bining);
        }

J
251 Beiträge seit 2012
vor 8 Jahren

Theo. würde es je Element so klappen z.B.:

var tmp = (Item)comboBox1.Items[0];

Das wäre eher dann für ComboBox in Verbindung mit den EventHandler, sobald ein Element ausgewählt wurde.

Der beabsichtigte Weg scheint wohl über das Binding zu gehen, welchen mit dem String Property auf Text von der TextBox liegt. Jetzt ohne in der Doku nachgeschlagen zu haben wird ToSting() aufgerufen vom jeweiligen Element, welches überschrieben wurde und einzig den Namen zurück gibt.

Mhh.. mir fällt nichts sauberes ein.. vllt hat noch wer anderes eine Idee mittels Binding und "schön"

[Edit] Wobei der Cast in der Beispiel Code-Zeile besser mittels as bzw. is umgesetzt werden sollte. Sicher ist sicher 😃 [/Edit]

4.939 Beiträge seit 2008
vor 8 Jahren

Hallo karl_heinz,

verwende komplett DataBinding, um die Daten an die ComboBox zu binden (Stichworte: DataSource, DisplayMember, ValueMember).
Erzeuge also ein List<Item> und setze dann diese als DataSource. Dann mußt du noch die Klasse Item so umschreiben, daß sie Name und VMDWert als öffentliche Eigenschaften (public properties) bereitstellt (und nicht wie bisher als private Felder).

s.a. Gewusst wie: Binden eines ComboBox-Steuerelements oder ListBox-Steuerelements in Windows Forms an Daten (zusätzlich noch comboBox.ValueMember passend setzen).

Und dann kannst du die SelectedValue-Eigenschaft der ComboBox an die TextBox binden.

K
karl_heinz Themenstarter:in
5 Beiträge seit 2015
vor 8 Jahren

Ich habe das Ganze jetzt nochmal umgebaut. Nun habe ich die Elemente als list.

Nun habe ich es hinbekommen, dass wenn ich ein Element auswähle es in einer Massagebox angezeigt wird durch MassageBox.Show .
Nun habe ich dazu auch 1000 Beispiele gefunden. Nur ich finde patu kein Einziges wie ich diesen Inhalt der Massagebox nun durch das OK klicken der Massagebox in eine TextBox bringen kann.

Nun bin ich immer noch nicht so fit drin und bin da nun gerade am verzweifeln....

4.939 Beiträge seit 2008
vor 8 Jahren

Was willst du denn auf einmal mit der MessageBox?

Ich schrieb doch: SelectedValue is your friend.

K
karl_heinz Themenstarter:in
5 Beiträge seit 2015
vor 8 Jahren

Naja ich habs einfach probiert, weil ich hier nicht weiter fragen wollte. Ich bin leider ein wenig "programmier" Forum geschädigt, denn oft bekommt man da die Antworten wie "lies dir mal die Manual durch" , und und und.
Ggf. ist es hier ja anders.

Kannst mir mir das am obrigen Beispiel was ich postete mal als Zeile formulieren, s o dass ich es einsetzen kann?
Habe damit noch ein wenig Probleme.

Wie gesagt entweder für das Beispiel oben oder für die jetzige Liste:


public Form1()
        {
            InitializeComponent();

            List<Person> list = new List<Person>();
            list.Add(new Person { ID = 0.09260, Name = "Test 1" });
            list.Add(new Person { ID = 0.06555, Name = "Test 2" });
            list.Add(new Person { ID = 0.08475, Name = "Test 3" });

            comboBox1.DataSource = new BindingSource(list,null);

            comboBox1.DisplayMember ="Name";
            comboBox1.ValueMember ="ID";

            comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);

            comboBox1.DropDownStyle=ComboBoxStyle.DropDownList;

            comboBox1.SelectedIndex =-1;


// Das ist falsch:

            public virtual string SelectedValue {get; set; }
            list.SelectedValue = comboBox1.Text;
            VMDAnzeige.Text = "Test" + List.SelectedValue + ".";


K
karl_heinz Themenstarter:in
5 Beiträge seit 2015
vor 8 Jahren

Ok, ich habe es hinbekommen!
Lösung:


 bining = new Binding("Text", comboBox1, "SelectedValue");

             VMDAnzeige.DataBindings.Add(bining);

Also musste es SelectedValue heißen statt Text,- ist ja auch irgendwie logisch 😁 👍 👍

5.658 Beiträge seit 2006
vor 8 Jahren

Hi karl_heinz,

Also musste es SelectedValue heißen statt Text,- ist ja auch irgendwie logisch 😄 😮 😮

Also da frage ich mich doch, ob du die Antworten auf deine Fragen überhaupt gelesen hast. Genau das hatte doch Th69 geschrieben - sogar zweimal!

Christian

Weeks of programming can save you hours of planning

K
karl_heinz Themenstarter:in
5 Beiträge seit 2015
vor 8 Jahren

K.a. ich habe da wieder an eine Funktion gedacht und war da nicht in der Spur. Stimmt natürlich.