Newsgroup: it.comp.lang.visual-basic
Titolo: vb.net eseguire codice all'apertura del form

Salve a tutti,
avrei la necessitą di eseguire una sub se passo dei parametri
all'applicazione, altrimenti attendo l'input dall'utente e la pressione di
un button:
ho catto cosi':
 form_load:
        For Each s As String In My.Application.CommandLineArgs
            txtTesto.Text = s
        Next
form_paint:
if txtTesto.Text<>"" then elabora()
il problema ora č che se gli passo un parametro funziona bene, ma se non
glielo passo, ogni volta che ridisegna il form mi esegue Elabora() e io
invece vorrei che se non li sono stati passati paramentri attendesse la
pressione del button...
come potrei fare?
Grazie 1000
D.
 

 un button:
perchè passi da form_load e form_paint? forse mi sfugge qualcosa...
io farei partire l'applicazione da una sub Main anzichè da una normale
form
Friend Shared Sub Main(ByVal args As String())
End Sub
a questo punto si analizzano i parametri passati via cmdline. quelli
necessari, poi, vengono passati tramite costruttori alla form e
memorizzati tramite field...se devi continuare ad utilizzarli
Marcello Cantelmo
www.cantelmosoftware.com

 
www.cantelmosoftware.com
 

 ha scritto nel messaggionews:8020d76b-1ed5-4fb1...@q14g2000vbf.googlegroups.com...
zac
Una form è una classe
come tale ci puoi inserire un campo pubblico...
o MEGLIO una property da valorizzare/leggere
rispondendo ad un altro partecipante nel post
"CHIUSURA APPLICAZIONE NON RIESCE"
ho proprio fatto una app di esempio che prende dei parametri dalla
linea di comando e li stampa sulla form
studiala ha gran parte di quello che ti serve
https://groups.google.com/group/it.comp.lang.visual-basic/browse_frm/thread/91ccd77aa50c11d5?hl=it#


[cut]
sono a buon punto... praticamente ho cambiato il tipo progetto in consolle e 
l'ho fatto partire dal sub main (come Applicazione windows form non era 
possibile farla partire dalla sub main).
Nella Class Form1 ho inserito:
public variabile as string
che dal sub main dopo aver instanziato la classe form1 riesco a valorizzare
L'unica cosa che non mi piace, č che cosi' facendo quando avvio 
l'applicazione si apre la finestra nera del prompt di ms-dos... che credo 
sia normale visto che č un'applicazione consolle... ma ora la domanda č: 
come faccio a far partire il progetto da una sub main senza che mi 
visualizzi la finestra nera del prompt di ms-dos?
grazie 1000 

sigh...perchè uno si danna per aiutarvi e poi manco fate la fatica di
leggere????
ti incollo qui la procedura passo passo per avere una applicazione che
leggge la riga di comando e la stampa sullo sfondo di una
form.....devi solo cambiare questa ultima cosa....invece di stampare
sullo sfondo fa qualcos'altro!
.........
ed allora mi son preso vs 2010 e butatto giu una mini app sega
passi...
progetto winform...ho lasciato il nome...mi ha proposto
WindowsApllication1
sono andato in proprietà del progetto ed al pannello "applicazione"
ho
cliccato su visualizza eventi applicazione
mi ha creato ApplicationEvents.vb...lasciamolo stare per ora!
Il codice della form1
Public Class Form1
    Private _qualcosa As String = ""
    Public WriteOnly Property Titolo
        Set(ByVal value)
            _qualcosa = value
        End Set
    End Property
    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim t As Graphics = Me.CreateGraphics
        t.DrawString(_qualcosa, New Font("ARIAL", 12),
Brushes.DarkRed, New PointF(x:=100, y:=100))
    End Sub
End Class
la form ha una proprieta writeonly che impostata stampa una stringa
dentro la form....nulla di che!
Ora riprendi applicationEvents.vb e incolla
 Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As
Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles
Me.Startup
            'L'array che conterrà i paramteri
            Dim MyStartupArguments() As String
            'Un contatore
            Dim intCount As Integer
            'Carico l'array
            MyStartupArguments =
System.Environment.GetCommandLineArgs
            'Qui cicla sui parametri che trova....QUI devi scrivere un
parser che fa quello che vuoi! e richiama quel che vuoi! Io gli passo
solo un parametro!
            For intCount = 0 To UBound(MyStartupArguments)
                Form1.Titolo =
(MyStartupArguments(intCount).ToString)
            Next
        End Sub
è grezzissima ma in buona sostanza non fa che leggere da riga di
comando dei parametri e passarli alla famosa proprietà di sopra....
Basta compila!
Adesso abbiamo una applicazione che lanceremo richiamando l'exe e
passandogli dei parametri da linea di comando....!

 public variabile as string
Non ho letto tutto, ma se vuoi far fare una cosa all'apertura di una form
in alcuni casi ti basta fare l'overload del New
Es
| Public Class Form1
|     Private autoClose as Boolean = False
| 
|     Public Sub New()
|         Me.New(Nothing, Nothing, False)
|     End Sub
| 
|     Public Sub New(ByVal o1 As Classe1, ByVal o2 As Classe2, ByVal autoClose As Boolean)
|         ' This call is required by the designer.
|         InitializeComponent()
| 
|         ' Add any initialization after the InitializeComponent() call.
| 
|         Me.autoClose=autoClose
|         CaricaDati()
| 
| 
|     End Sub
| End Class
Questo è il concetto poi con i parametri che passi puoi far eseguire anche
i metodi al Load usando una variabile privata di flag.

 grazie 1000
piccolo esempio che gestisce il passaggio dei parametri in questo
modo:
/c = utilizza solo console ...oppure
/w = utilizza solo winforms
/f = un tuo file e/o parametro
quindi :
tuoprogramma /w /f:tuofile.txt
il codice lo trovi a questo indirizzo:
http://www.cantelmosoftware.com/download/startfromconsole.zip
 (73
kb...src code in 
vb.net
 2008 express edition)
nell'esempio:
- non si usa il namespace "My" ...in modo da poter essere riutilizzato
anche in c#
- si usa una sola classe per l'avvio sia in console-mode che window-
mode
- inizialmente parte in console-mode (start quindi da Sub Main) e
quando si decide di switchare in GUI viene chiusa automaticamente la
finestra console sfruttando la tecnica (freeconsole) che ti ho
segnalato nell'altro thread (
http://groups.google.com/group/
it.comp.lang.visual-basic/browse_thread/thread/ad9a2a2cf67ac08c#)
- non si segnalano problemi nella "chiusura applicazione"
insomma giusto un'idea, poi valuta e/o modifica secondo le tue
esigenze ;-)
Marcello Cantelmo
www.cantelmosoftware.com