Press "Enter" to skip to content

Come Mostrare su una Textbox un valore legato al valore di una combobox

Una domanda sul forum microsoft, da parte di un principiante che potete trovare qui, richiedeva come fare, dopo aver caricato i dati di una tabella su una ComboBox che ne mostra una colonna, a mostrare il contenuto di un altra colonna su una TextBox in base a cosa fosse selezionato sulla ComboBox .

Essendo un operazione che si fa spesso, nella programmazione Windows Forms, ho fatto un piccolo esempio vacanziero per mostrare come si fa.

wimdow_01

wimdow_02

L’applicazione

L’applicazione è molto semplice, nella Form1 creata dal progetto Windows Forms base di .Net, ho inserito una ComboBox ed una TextBox.

La classe Product.cs

Ho poi creato una classe che rappresenta l’oggetto mostrato dai 2 controlli, un oggetto che ho chiamato Product.

public class Product
{


private string mCode;


public string Code
{
get
{
return mCode;
}
set
{
mCode = value;
}
}


private string mName;


public string Name
{
get
{
return mName;
}
set
{
mName = value;
}
}

La classe è molto semplice, contiene due properties che saranno i valori mostrati dai due controlli, quindi un codice e un nome.

La classe Form1.cs

Dentro alla form ho scritto il codice necessario ad inserire alcuni dati di prova e a gestire i controlli.

public Form1()
{
InitializeComponent();
Products = new List<Product>();
}

Nel costruttore ho creato una collection di oggetti Product che mi permetterà di alimentare la ComboBox .

private List<Product> mProducts;


public List<Product> Products
{
get
{
return mProducts;
}
private set
{
mProducts = value;
}
}

La property che rappresenta la collezione dei prodotti.

private void Form1_Load(object sender, EventArgs e)
{
Products.Add(new Product() {Code="TN01", Name = "Tenda 2 persone" });
Products.Add(new Product() {Code="OM01", Name = "Ombrellone 2mt" });
Products.Add(new Product() {Code="SD01", Name = "Sdraio Extra lusso" });
Products.Add(new Product() {Code="GS01", Name = "Fornello da campeggio" });
Products.Add(new Product() {Code="LM01", Name = "Lampada a Led" });
comboBox1.DataSource = Products;

comboBox1.DisplayMember = "Code";

}

Nell’evento Load della form, ho inserito una serie di prodotti nella nostra lista e ho assegnato la property come DataSource della ComboBox .

private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
Product p = comboBox1.SelectedItem as Product;

if (p != null)
{
textBox1.Text = p.Name;
}
}

Ho poi creato un event handler per l’evento SelectedValueChanged della ComboBox ed in questo evento, al variare del valore della ComboBox vado ad inizializzare il testo della TextBox. Per i principianti, ricordo che: assegnando la collezione Products come DataSource alla Combobox, e indicandole di usare “Code” come DisplayMember, il SelectedItem della ComboBox sarà un Product, per questo, la prima operazione che faccio nell’event handler è effettuare un cast del SelectedItem (che è un object in modo da permettere l’uso di qualsiasi oggetto vogliamo come sorgente dati di una ComboBox) assegnandolo ad una variabile di tipo Product.

A questo punto posso usare Name per dare un valore alla Textbox.

Ovviamente, questo è il metodo “Modello base” avrei anche potuto utilizzare il databinding e collegare le property ai controlli, ma in questo caso ci limitiamo alla versione 1.0, proporrò un esempio simile in WPF dove vi mostrerò le meraviglie del databinding.

Riepilogo

In questo post abbiamo visto le seguenti cose:

  • Come creare una classe per gestire dei dati, la classe Product
  • Come creare e riempire una collection di oggetti Product
  • Come usare la collection per fare da sorgente dati per una ComboBox
  • Come utilizzare gli eventi della ComboBox e le sue property per modificare il contenuto di una TextBox in base a quello della ComboBox.

Potete scaricare il progetto esempio dal link qui indicato:

Per qualsiasi domanda, osservazione, commento, approfondimento, o per segnalare un errore, potete usare il link alla form di contatto in cima alla pagina.