View Full Version : C# - Comandi per gestire le finestre di dialogo (form)
Samb1985
06-08-2007, 09:28
Qual'è il comando da associare al click su un button "ok" di una finestra di dialogo form in modo che venga chiusa la finestra e possa essere riaperta successivamente nell'esecuzione senza che venga visualizzato il messaggio che la risorsa è già occupata ?
ho provato con this.Close() ma alla successiva riapertura della finestra viene visualizzato l'errore di risorsa già occupata.
Un'altra domanda...le finestre di dialogo contengono visualizzazioni di dati derivanti da una query sul db. Se un dato viene modificato, quando la finestra viene chiusa il dato sul db viene aggiornato ?
Se un dato viene modificato, quando la finestra viene chiusa il dato sul db viene aggiornato ?
Lo puoi sapere solo tu...se alla riapertura della finestra leggi i dati dal db e li visualizzi, sì. Se usi i dati estratti precedentemente e memorizzati chissà dove, no.
Non è che tu hai fatto apparire il form con Form.ShowDialog()? In tal caso per chiuderlo non ti basta il Form.Close(), ma ti serve anche un Form.Dispose() per liberare le risorse.
Altrimenti usa Form.Show()....
Samb1985
06-08-2007, 12:07
Non è che tu hai fatto apparire il form con Form.ShowDialog()? In tal caso per chiuderlo non ti basta il Form.Close(), ma ti serve anche un Form.Dispose() per liberare le risorse.
Altrimenti usa Form.Show()....
si ho utilizzato form.ShowDialog()...che differenza c'è rispetto a Form.Show() ?
Comunque ho modificato mettendo form.Show() e da lo stesso problema...anche se uso form.dispose() per chiudere....l'errore è sempre quello che la risorsa non è stata rilasciata
immagino che tu apra delle connessioni a db etc... controlla che vengano chiuse etc... Magari se posti un po' di codice vedo meglio ;)
Samb1985
06-08-2007, 13:19
immagino che tu apra delle connessioni a db etc... controlla che vengano chiuse etc... Magari se posti un po' di codice vedo meglio ;)
Visto che nella finestra in questione utilizzo le informazioni Assembly, possono essere queste a causare il problema ?
non puoi farci vedere il codice della zona incriminata?
Secondo me hai un Resultset o una connessione al db non chiusi, e provi a riaprirli.
Samb1985
06-08-2007, 13:56
Questo è il codice della finestra che crea problemi.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Reflection;
namespace XXXX
{
partial class AboutBox : Form
{
public AboutBox()
{
InitializeComponent();
// Inizializzare AboutBox per visualizzare le informazioni sul prodotto dalle informazioni dell'assembly.
// Modificare le impostazioni delle informazioni dell'assembly per l'applicazione utilizzando:
// - Progetto->Proprietà->Applicazione->Informazioni assembly
// - AssemblyInfo.cs
this.Text = String.Format("Informazioni su {0}", AssemblyTitle);
this.labelProductName.Text = AssemblyProduct;
this.labelVersion.Text = String.Format("Versione {0}", AssemblyVersion);
this.labelCopyright.Text = AssemblyCopyright;
this.labelCompanyName.Text = AssemblyCompany;
this.textBoxDescription.Text = AssemblyDescription;
}
#region Funzioni di accesso attributo assembly
public string AssemblyTitle
{
get
{
// Ottiene tutti gli attributi Title di questo assembly
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
// Se è presente almeno un attributo Title
if (attributes.Length > 0)
{
// Seleziona il primo
AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0];
// Se non è una stringa vuota, lo restituisce
if (titleAttribute.Title != "")
return titleAttribute.Title;
}
// Se l'attributo Title non è presente o è costituito da una stringa vuota, restituisce il nome dell'eseguibile
return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
}
}
public string AssemblyVersion
{
get
{
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
public string AssemblyDescription
{
get
{
// Ottiene tutti gli attributi Description di questo assembly
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
// Se l'attributo Description non è presente, restituisce una stringa vuota
if (attributes.Length == 0)
return "";
// Se l'attributo Description è presente, ne restituisce il valore
return ((AssemblyDescriptionAttribute)attributes[0]).Description;
}
}
public string AssemblyProduct
{
get
{
// Ottiene tutti gli attributi Product di questo assembly
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false);
// Se l'attributo Product non è presente, restituisce una stringa vuota
if (attributes.Length == 0)
return "";
// Se l'attributo Product è presente, ne restituisce il valore
return ((AssemblyProductAttribute)attributes[0]).Product;
}
}
public string AssemblyCopyright
{
get
{
// Ottiene tutti gli attributi Copyright di questo assembly
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
// Se l'attributo Copyright non è presente, restituisce una stringa vuota
if (attributes.Length == 0)
return "";
// Se l'attributo Copyright è presente, ne restituisce il valore
return ((AssemblyCopyrightAttribute)attributes[0]).Copyright;
}
}
public string AssemblyCompany
{
get
{
// Ottiene tutti gli attributi Company di questo assembly
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
// Se l'attributo Company non è presente, restituisce una stringa vuota
if (attributes.Length == 0)
return "";
// Se l'attributo Company è presente, ne restituisce il valore
return ((AssemblyCompanyAttribute)attributes[0]).Company;
}
}
#endregion
private void okButton_Click(object sender, EventArgs e)
{
this.Close(); // o Dispose il risultato non cambia
}
}
}
Questa parte cosi' com'è non dovrebbe dare problemi (e non ne da). Fai vedere il click o la parte di codice che istanzia e mostra il form AboutBox
Samb1985
06-08-2007, 15:28
Questa parte cosi' com'è non dovrebbe dare problemi (e non ne da). Fai vedere il click o la parte di codice che istanzia e mostra il form AboutBox
questa è la parte che mostra il form:
private void informazionisuToolStripMenuItem_Click(object sender, EventArgs e)
{
myAboutBox.Show();
}
Una soluzione alternativa funzionante è usare Hide() per chiudere anche se non è corretta per il significato dell'hide...
prova a fare dei check sul form myAboutBox, cose tipo :
if(myAboutBoix!=null)
{
if(myAboutBox.IsDisposed)
myAboutBox = new AboutBox();
}
else
{
myAboutBox = new AboutBox();
}
myAboutBox.Show();
(che codice orrendo.... :D)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.