Salvataggio del contenuto di una textbox

giovedì 19 maggio 2005 - 18.06

Akix Profilo | Newbie

Come faccio a salvare il contenuto di una textbox in una variabile dichiarata in una form diversa?

alextyx Profilo | Expert

Devi avere visibilità sulla Form (chiamiamola F2) che contiene la variabile (Chiamiamola S visto che sarà una stringa) e la variabile deve essere dichiarata pubblica nella tua F2, cioè:

Public S as String="" 'L'inizializzazione esplicita a stringa nulla è facoltativa, ma è una buona abitudine inizializzare sempre le variabili

A quel punto dalla prima form, quella che contiene la textbox (diciamo Textbox1), scriverai:

F2.S=Me.textbox1.text

Il problema, potrebbe essere quello di riuscire a vedere F.
Se F viene dichiarato all'interno della prima form, non hai problemi, altrimenti devi dichiararlo come pubblico in un metodo.
Spero di non aver scritto troppe castronerie; è codice scritto a memoria e con sintassi non controllata, quindi mi scuso in anticipo x eventuali inesattezze. Il succo del discorso, invece, dovrebbe essere corretto!

Akix Profilo | Newbie

Nel primo post ho dmenticato di dire che il salvataggio del contenuto della textbox va trasferito al clic di un bottone, quindi ho inserito il codice postato nell'evento button_click.
Ora ho problemi di visibilità dela variabile:
Nella form2 (che contiene la textbox) richiamo:

Form1.percorso_loc = Me.TextBox2.Text

dove Form1 è il nome dela prima form e percorso_loc è il nome della stringa, che NON è stato possibile dichiarare Public, in quanto :
"Public" non valido in una dichiarazione di variabile

alextyx Profilo | Expert

Devi dichiarare la variabile come pubblica nel posto giusto. Tu stai cercando di dichiararla come tale all'interno di una procedura, vero?
Devi dichiararla all'iniszio del codice della form.
Le prime due righe del codice saranno per esempio:

Public Class FrmEditaPrimaNota

Inherits System.Windows.Forms.Form

Qui sotto devi dichiarare le tue variabili che avranno un ambito di visibilità interno alla form, se dichiarate Private (o con Dim), mentre avranno un ambito di visibilità per tutto il progetto se Friend e addirittura per tutta la soluzione se Public.
Fammi sapre se così risolvi. Ciao.

Akix Profilo | Newbie

No non ho risolto, ora il messaggio di errore è:

Il riferimento ad un membro non condiviso riciede un riferimento ad un oggetto.

alextyx Profilo | Expert

Esattamente dove ti dà codesto errore?
Hai istanziato la form che contiene la variabile?

Akix Profilo | Newbie

Ricapitolando ho due form:
Form2 che contiene una textbox, e Form1 che contiene la variabile a cui voglio passare il valore dela textbox.
All'inizio della classe Form1 ho dichiarato la variabile nl modo seguente:

Inherits System.Windows.Forms.Form
Public percorso_loc As String

Sempre nella form1 al clic di un bottone si carica la form2 col metodo ShowDialog()
Nella form2 (al clic di un bottone)

Form1.percorso_loc = Me.TextBox2.Text

ed è in questo punto che mi dà errore, sufrm1.percorso_loc.

alextyx Profilo | Expert

Dove hai istanziato la form1?
E' l'oggetto di avvio del progetto?

Se non lanci il progetto dalla submain e non dichiari pubblica la form1, non potrai vederla dalla Form2.
Hai anche altre alternative come passare la Form1 come riferimento ad un overload della sub new della Form2, o passare, con lo stesso procedimento, la sola textxbox che ti interessa. Comunque sia, io in genere uso il primo metodo che funziona così:

1) Da Progetto ---> Proprietà cambi l'oggetto di avvio da Form1 a Sub Main
2) Da Progetto ---> Aggiungi Modulo
3) Nel modulo scriverai:

Module Module1

' ----------------- Dichiarazioni di Form -----------------------------------
Public F1 As New Form1

Public Sub Main()
Application.Run(F1)
End Sub

End Module

4) Da ora in poi, anzichè scrivere Form1.pippo, scriverai F1.pippo, dato che nel mio esempio ho dato il nome F1 all'istanza creata.

Spero che con questo tu risolva. Ciao.

Akix Profilo | Newbie

Ok. Grazie mille per la pazienza. Ma ora durante l'esecuzine viene generata um'eccezione di overflow, in una parte di codice generata da Windows form. Il problema persiste anche importando la System.StackOverflowexception

alextyx Profilo | Expert

E' dura capire dove mettere le mani....bisognerebbe che tu chiarissi meglio dove e cosa accade. Magari postando la porzione di codice.

martinmystero Profilo | Newbie

Ciao,
secondo me faresti prima a crearti in un modulo la variabile percorso_loc

module Variabili
Public Percorso_lo as string=""
end modulo

'....Form1
' assegni il valore quando ti pare... ma prima di premere il bottone nel Form2

' Form2
'Leggi il valore presente e lo assegni alla TexBox

Akix Profilo | Newbie

Grazie dellaiuto. Vi posto un po di codice; questo è il codice della prima form (vi ho indicato il punto in cui si g
enera l'eccezione)


Module Variabili
Public Percorso_loc As String = ""
End Module

Public Class Form1
Inherits System.Windows.Forms.Form


Public F1 As New Form1
Public F2 As New Form2


Public Sub Main()
Application.Run(F1)
End Sub



'Public percorso_web As String
'Public percorso_loc As String


#Region " Codice generato da Progettazione Windows Form "

Public Sub New()
MyBase.New() <- GENERAZIOE DI ECCEZIONE STACK OVERFLOW!!
...
#End region

Public Class MyPolicy
Implements ICertificatePolicy

Public Function CheckValidationResult(ByVal srvPoint As ServicePoint, _
ByVal cert As X509Certificate, ByVal request As WebRequest, _
ByVal certificateProblem As Integer) _
As Boolean Implements ICertificatePolicy.CheckValidationResult
'Return True to force the certificate to be accepted.
Return True
End Function
End Class

Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim MyWebClient As New WebClient

Percorso_loc = "C:\programmi"
' Dichiarazione della classe ServicePointManager
System.Net.ServicePointManager.CertificatePolicy = New MyPolicy
....
MessageBox.Show("Download avvenuto correttamente")
Process.Start("\\192.168....TOWL.mdb")
Me.Close()

End Sub

Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim f2 As New Form2
Application.Run(f2)
End Sub

alextyx Profilo | Expert

Il codice delle dichiarazioni dei moduli e la sub main devi metterlo in un modulo, ad esempio il tuo modulo variabili e non nella form:


Module Variabili
Public Percorso_loc As String = ""

Public F1 As New Form1
Public F2 As New Form2


Public Sub Main()
Application.Run(F1)
End Sub

End Module

Poi, ricorda di mettere come oggetto di avvio del progetto, la sub main. Lo fai da:
Progetto ---> Proprietà

Fammi sapere. Ciao.

Akix Profilo | Newbie

sei sicuro? Ora ho moltissime "Istruzione non valida nello spazio dei nomi", ad ogni routine chiamata ed anche nel codice generato da windows form.

alextyx Profilo | Expert

Sono piuttosto sicuro di quello che ti ho detto e mi torna anche che altrimenti ti dia quell'errore. Mi pare probabile che ci siano altre magagnette da tirare fuori. Se il tuo progetto non è troppo complicato e se non contiene cose che non vuoi mostrare ad altri, potresti anche proivare a postarmi tutta la cartella del progetto. Posso provare a dargli un'occhiata con calma. Vedi un po' tu. Chiaro che se è molto pesante non riuscirò ad orizzontarmici. Comunque puoi spedirlo qui: alex@aeaprato.it
Ciao.

alextyx Profilo | Expert

Ah...se supera i 4 o 5 megabyte, temo che non entrerà nella mailbox!

alextyx Profilo | Expert

Ti ho rispedito il progettino. Dovrebbe andare. Ciao.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5