PDA

View Full Version : [C#] Passaggio parametri fra classi diverse


R1((ky
27-10-2008, 13:45
Salve a tutti, continua la mia disperata avventura con il C#, e c'è una cosa(fra le tante) che non riesco a capire.

nel mio progetto, in cui ho una form e un pulsante, ho una funzione (scusate arrivo dal VB) "mostra" che apre un MessageBox mostrando una stringa che dovrei passare dal pulsante:



using System;
using System.Collections.Generic;
using System.Windows.Forms;


namespace test1
{
public class Program
{

/// <summary>
/// Punto di ingresso principale dell'applicazione.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}

public void mostra(string messaggio)
{
MessageBox.Show(messaggio);
}

}
}




questo è il codice della form:



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace test1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


private void button1_Click(object sender, EventArgs e)
{
mostra("Ciao");
}


}
}




Mi spiegate perchè la funzione "mostra" nella classe Form1 non viene vista, ma la cosa funziona solo se sposto l'evento nella stessa classe della funzione stessa, cioè "Program"?
Come devo fare perchè una "funzione" sia visibile a tutte le classi del mio progetto?

Grazie per la pazienza

RaouL_BennetH
27-10-2008, 14:01
Ciao :)

Prima di tutto, ti consiglierei di non aggiungere nulla al file Program che ti viene creato di base.

Concettualmente ogni file (classe) dovrebbe avere un preciso ambito/scopo.

Per fare ciò che vuoi, ti suggerirei di procedere così:


//creo una classe che sarà la mia contenitrice di messaggi

public class MostraMessaggi
{
private string messaggio;

public void Mostra(string messaggio)
{
this.messaggio = messaggio;
MessageBox.Show(messaggio);
}
}



//dal form:
private void button1_Click(object sender, EventArgs e)
{
MostraMessaggi m = new MostraMessaggi();
m.Mostra("ciao");
}


Oppure, potresti decidere che il costruttore della tua classe debba avere dei parametri:


//esempio 2
public class MostraMessaggi
{
private string messaggio;

public MostraMessaggi
{
this.messaggio = messaggio;
MessageBox.Show(messaggio);
}
}

//e dal form

private void button1_Click(object sender, EventArgs e)
{
MostraMessaggi m = new MostraMessaggi("ciao");
}

tomminno
27-10-2008, 14:07
Mi spiegate perchè la funzione "mostra" nella classe Form1 non viene vista, ma la cosa funziona solo se sposto l'evento nella stessa classe della funzione stessa, cioè "Program"?


Dovresti riguardarti un attimo le basi della programmazione ad oggetti.
Se il metodo non è statico prima di accedervi devi istanziare un oggetto, nel tuo caso di tipo Program.


public partial class Form1 : Form
{
private Program program = new Program();

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
program.mostra("Ciao");
}

}



Come devo fare perchè una "funzione" sia visibile a tutte le classi del mio progetto?

Grazie per la pazienza

In generale usando metodi statici, il framework è pieno di metodi statici. Non so però se nel tuo caso sia indicato a cosa ti servirebbe?