|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2012
Messaggi: 88
|
[Problema c#]Passaggio istanza di Form1 a un Form2
Ciao ragazzi vi scrivo per avere delle info sul passaggio di un'oggetto da un form all'altro in c#..
praticamente sto creando un applicazione che fa delle determinate cose in un form, poi viene aperto un nuovo form che deve permettere di modificare l'oggetto in questione e ritornare l'oggetto modificato al form di partenza. Per fare cio ho quindi creato due form, una volta avviato il primo (Form1) e fatto quello che si deve fare (viene creato l'oggetto, si inzializza, si fanno le operazioni ecc), clicco su un pulsante 'Modifica' che crea una nuova istanza di FormModifica: private void btnModifica_Click(object sender, EventArgs e) { FormModifica fm = new FormModifica(); fm.ShowDialog(); } E fino a qui ci siamo, il secondo form viene avviato...ma devo passare al nuovo form l'oggetto 'o' sul quale deve lavorare Il problema è che non riesco a passare l'oggetto perchè dal FormModifica devo creare un'istanza del Form1 e creandola si viene a creare un nuovo Form che non contiene i dati che mi interessano..come posso passare l'istanza Form1 sulla quale ho lavorato, al form2? Spero di essere stato chiaro se non avete capito qualcosa ditemelo ^^ |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Quote:
In tal caso ti basta specificare un costruttore di FormModifica (o modificare quello che viene autogenerato) che accetti in ingresso un oggetto di tipo Form1. Fatto questo il codice da te scritto viene modificato semplicemente così: Codice:
private void btnModifica_Click(object sender, EventArgs e)
{
FormModifica fm = new FormModifica(this);
fm.ShowDialog();
}
|
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jun 2012
Messaggi: 88
|
Sisi ecco una cosa del genere, come avviene per gli oggetti standard che tramite costruttore si passano, volevo passare il form al nuovo form...quindi basta mettere la parola this è avrò l'istanza nel formload del FormModifica?
Poi dal FormModifica, per mettere l'istanza in un oggetto di classe Form1, in modo da poterci lavorare come faccio? Ne FormModifica_Load come faccio a tirarmi l'istanza appena passata e metterla in un oggetto? |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Quote:
Ipotizziamo che tu, all'inizio del programma, ti crei un'istanza di Form1 chiamata mainWindow, che è per l'appunto la tua pagina principale. Dopodichè tramite pulsante invochi l'apertura di una nuova finestra di tipo FormModifica. Così: Codice:
private void btnModifica_Click(object sender, EventArgs e)
{
FormModifica fm = new FormModifica(this);
fm.ShowDialog();
}
Codice:
public FormModifica (Form1 parent)
{
_parent = parent;
}
Spero di essermi spiegato bene |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jun 2012
Messaggi: 88
|
Non ci avevo completamente fatto caso che form.cs essendo una classe ha il suo costruttore e potevo passare parametri usando quello xD
Comunque alla fine invece di passare l'intero form ho passato solo l'oggetto che dovevo modificare, che ho poi ritornato al form principale tramite un metodo! Adesso volevo chiederti un'altra cosa...so che siamo offtopic ma non vorrei aprire un'altra discussione solo per questa cosa...come si crittografa un file? Ora come ora salvo il file come testo tramite StreamWriter, writeline(), ecc ma così ovviamente è facile modificare il file salvato anche con il semplice notepad...come posso scriverlo in modo da renderlo illeggibile al blocco note, ma solo all app? |
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Quote:
Quote:
|
||
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jun 2012
Messaggi: 88
|
Ok ti ringrazio per i consigli vedrò di informarmi
Per ritornare intendo che ho passato l'oggetto, l'ho assegnato a una variabile locale, e poi tramite un metodo l'ho ritornato object o; //costruttore public FormModifica(object ogg) { Object o= ogg } .. //codice per la modifca// .. //ritorna l'oggetto dopo averlo modificato public object getOggettoMod() { return ogg; } quest'ultimo metodo lo chiamo nel form principale dopo aver chiuso il dialog formModifica in questo modo: oggMod=fm.getOggettoMod(); |
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: Jun 2012
Messaggi: 88
|
Quote:
Il programma è quasi completo adesso! Appena lo finisco vi posto il video demo ^^ Comunque un ultima cosa...Oltre al form modifica ho creato altri form, tutti aperti in showdialog... Il funzionamento è lo stesso, una volta effettuate le operazioni, si clicca in un bottone che avvia il metodo corrispondente, fa le operazioni e poi torna un oggetto di tipo DialogResult.Ok C'è un piccolo problema però, nel caso in cui l'utente inserisce dei dati non validi, l'errore viene segnalato tramite MessageBox, ma essendo che il bottone torna l'oggetto di tipo DialogResult quando lo premo, il form viene chiuso e quindi l'utente deve ripetere la procedura (reinserendo i dati ecc) il che è un pò antipatico.... C'è un modo per evitare che il bottone torni il DialogResult una volta finito il metodo, e farlo solo se effettivamente la procedura è andata a buon fine? |
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Jul 2009
Messaggi: 146
|
Si , basta non mettere il DialogResult.Ok quando preme il pulsante ok . Quando preme il pulsante OK tu chiami una procedura che controlla se gli input sono accettabili , se il controllo va a buon fine allora fai il set DialogResult.Ok , altrimenti esci dalla sub senza fare niente.
Codice:
Private Sub OKButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles OKButton.Click
//funzione che fa il controllo sull'input
controllo()
End Sub
private sub controllo()
//controlli su input ...
//esito true se input accettabile altrimenti else
if esito = true then
DialogResult.Ok
else
//segnalare errore su input
messagebox.show("ERRORE")
end if
end sub
Ultima modifica di simo8 : 04-11-2012 alle 19:48. |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Jun 2012
Messaggi: 88
|
Perfetto adesso funziona ^^ Ci siamo quasi...un ultima cosa esiste qualche metodo per ridimensionare file immagine?
Vi spiego, praticamente quando viene selezionata un immagine, essa viene copiata in una cartella nella stessa directory dell eseguibile, ma ovviamente la dimensione resta quella originale...dato che non mi importa della qualità, perchè poi dentro il form l'immagine viene visualizzata ridimensionata proporzionalmente alla dimensione di un picture box, esiste un modo per ridimensionare il file copiato, in modo da risparmiare spazio sul disco? |
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Jun 2012
Messaggi: 88
|
Come promesso eccovi il video del programma
Per il fatto dell'immagine se sapete aiutarmi bene se no più in la si vedrà alla fine non è una cosa fondamentale http://www.youtube.com/watch?feature...&v=NSCtAcW_2pQ Nel canale trovate anche altri video di altri programmi! Ultima modifica di Darioct28 : 06-11-2012 alle 17:47. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:42.




















