giovannibart91 (Member)
Pro
Messaggi: 64
Iscritto: 30/05/2008
|
Questo topic è stato chiuso dal moderatore Cerco aiuto di media priorità per chiunque sappia intercettare tutti i possibili eventi che si generano ad esempio nel blocco note (o comunque nel più semplice editor di testo che esista) quando facciamo "Nuovo", "Apri", "Salva" o "Salva con nome".
Proprio non capisco come ci si riesca con meno delle mie 454 righe di codice (contate!).
Ad esempio: io ho aperto con il blocco note un file, dopo averlo modificato devo ovviamente chiedere all'utente se apportare le modifiche effettuate a quel file, e se l'utente sceglie "no, allora devo fargli aprire la finestra di dialogo per aprire un file, se invece sceglie "Sì", allora devo salvare il file e mostrare la finestra "Apri", se invece sceglie "Annulla" devo tenere tutto così com'è... Se però nella finestra "Apri file" l'utente sceglie "Annulla", allora devo mantenere il testo del file precedente e annullare l'operazione... insomma, roba da andare fuori di testa!! E proprio non riesco a capire come il blocco note riesca a starci in solo 68 kilobyte e mezzo!
Come detto all'inizio ringrazio infinitamente se qualcuno mi riuscisse a dare indicazioni su come "comprimere" il più possibile la gestione degli eventi... Grazie anticipatamente...
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Da quello che ho capito tu vorresti intercettare eventi da un programma esterno, nella fattispecie il notepad... ma, dopotutto, che bisogno ci sarebbe di farlo per far ripetere le stesse operazioni che fa lui? O forse volevi solo sapere come creare una interfaccia simile a quella del blocco note, con un DropDownMenu, dato che la gestione degli eventi appartiene al tuo programma?
Ma perchè non mettete un po' di chiarezza in queste domande?
Comunque, se si tratta della seconda, questo è un buon risultato:
http://www.pierotofy.it/pages/guide/Guida_al_Visual_Basic_ ...
Dovrebbe starci tutto in non più di 30 righe.
Ultima modifica effettuata da Il Totem il 15/05/2007 alle 18:40 |
|
giovannibart91 (Member)
Pro
Messaggi: 64
Iscritto: 30/05/2008
|
Scusa se non sono stato molto chiaro...
Comunque il mio problema è creare appunto un'interfaccia simile al notepad con tutti i relativi eventi del dropdownmenu, è solo che sono talmente tanti gli eventi che sono riuscito a gestirli tutti, ma mi stanno in 454 righe di codice (un'infinità!!). Specifico che gli eventi del dropdownmenu sono tutti quelli della voce "File" e sembrano pochi, ma in realtà sotto c'è tutta una rete di specifici eventi (ad esempio, io clicco sulla voce "File->Apri", però se il testo nella textbox è stato modificato devo chiedere all'utente se salvar le modifiche, mostrare la finestra di dialogo "Apri" e se l'utente decide di cliccare su "Annulla" non devo apportare nessuna modifica...), UNA VERA CONFUSIONE!
Quindi volevo chiedere se è possibile gestire questi eventi in un modo migliore e soprattutto in meno righe di codice!
Comunque grazie per aver letto il mio post.
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Ora ho capito... in questo momento non ho tempo, te lo scriverò successivamente, ma ti suggerisco di usare una variabile booleana per controllare la modifca del testo.
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Codice sorgente - presumibilmente VB.NET |
Dim Modificato As Boolean = False Dim SavePath As String = Nothing Public Sub Save(ByVal Ask As Boolean) Dim S As New SaveFileDialog If Ask = False OrElse MsgBox("Salvare modifiche?", MsgBoxStyle.Question + vbYesNo) = MsgBoxResult.Yes Then If S.ShowDialog = Windows.Forms.DialogResult.OK Then Dim W As New IO.StreamWriter(S.FileName) W.Write(TextBox1.Text) W.Close() SavePath = S.FileName End If End If End Sub Private Sub NuovoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NuovoToolStripMenuItem.Click If Modificato Then Save(True) End If SavePath = Nothing TextBox1.Text = "" End Sub Private Sub ApriToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ApriToolStripMenuItem.Click If Modificato Then Save(True) End If SavePath = Nothing Dim O As New OpenFileDialog If O.ShowDialog = Windows.Forms.DialogResult.OK Then Dim R As New IO.StreamReader(O.FileName) TextBox1.Text = R.ReadToEnd R.Close() End If End Sub Private Sub SalvaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SalvaToolStripMenuItem.Click If SavePath <> Nothing Then Dim W As New IO.StreamWriter(SavePath) W.Write(TextBox1.Text) W.Close() Else Save(False) End If End Sub Private Sub SalvaConNomeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SalvaConNomeToolStripMenuItem.Click Save(False) End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged Modificato = True End Sub
|
47 righe.
Il Menu a discesa è costituito da un elemento MenuStrip, con quattro elementi nella lista: Nuovo, Apri, Salva e Salva con nome. Mi sembra che funzioni in tutti i casi, è questo che cercavi?
|
|
giovannibart91 (Member)
Pro
Messaggi: 64
Iscritto: 30/05/2008
|
Sì, anche se non è stato intercettato l'evento per quando si chiudeva il form è tutto perfetto, grazie mille!
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Dettagli!
Comunque io sto sempre aspettando che Piero faccia quello script per mantenere l'indentazione dei tag Code: così il sorgente è orribile .
|
|
giovannibart91 (Member)
Pro
Messaggi: 64
Iscritto: 30/05/2008
|
Sì, ma per l'IDE l'indentazione c'è e quindi basta incollare che tutto si mette a posto.
E poi non pensi che se ci sono troppe indentazioni dopo non si legge più niente perchè quello che va oltre la pagina va a capo? dopo si leggerà tutto peggio di prima...
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Basta non mettere la tabulazione ma due spazi, e peggio di così non può andare. Beh, visto che stiamo andando , se non hai niente altro da chiedere chiudo il topic.
|
|