मुझे लगता है कि निर्माता में एक फार्म बंद करने के लिए समझदारी नहीं है।यदि आप ऐसा करते हैं, तो आपके फॉर्म के उपयोगकर्ता यह नहीं जान पाएंगे कि ShowDialog या नहीं।
// in the parent form:
public void ShowMyForm()
{
MyForm form = new MyForm();
form.propertyA = ...;
from.propertyB = ...;
DialogResult dlgResult = form.ShowDialog(this);
ProcessDialogResult(dlgResult);
}
आप ShowDialog और संवाद परिणाम प्रक्रिया के लिए कि क्या तय करने के लिए विशेष कोड जोड़ना होगा:
निम्नलिखित कोड काफी सामान्य उपयोग होगा।
इसके अलावा आप सुनिश्चित हैं कि गुण कभी प्रभावित नहीं होंगे कि फ़ॉर्म दिखाया जाना है या नहीं? भविष्य में बदलाव के बाद भी?
निर्माण के दौरान फॉर्म अभी तक नहीं दिखाया/खोला गया है। तो मुझे डर है बंद() जो आप उम्मीद करते हैं वह नहीं करता है।
साफ-सुथरा तरीका Form_Load में आपके चेक करना है। फॉर्म लोड इवेंट हैंडलर जोड़ें और उस पल में अपने चेक करें। यह संकेत करने के लिए कि आपने फॉर्म को न दिखाने का निर्णय लिया है, संवाद संवाद का उपयोग करें। ,
// in the parent form:
public void ShowMyForm()
{
MyForm form = new MyForm();
form.propertyA = ...;
from.propertyB = ...;
DialogResult dlgResult = form.ShowDialog(this);
switch (dlgResult)
{
case System.Windows.Forms.DialogResult.Cancel:
...
break;
case System.Windows.Forms.DialogResult.OK:
...
break;
// etc.
}
}
हालांकि इस काम नहीं करेगा क्योंकि बंद केवल ठीक कहा जा सकता है लोड पूर्ण होने के बाद:
private void FormMain_Load (object sender, EventArgs e)
{
if (FormShouldNotLoad())
{
this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
Close();
}
}
कोड के उपयोगकर्ता संवाद का परिणाम की जांच कर सकता। तो बजाय बंद बुला() की है, तो आप BeginInvoke बंद() फ़ंक्शन, तो बंद समारोह लोड हो रहा है के बाद बुलाया जाएगा किया जाना चाहिए है:
कोड बंद() लोड हो रहा है हो जाएगा समाप्त हो गया है के बाद कॉल करने के लिए इस प्रकार की तरह:
private void FormMain_Load (object sender, EventArgs e)
{
if (MyFunc())
{
CancelLoading();
}
}
private delegate void InvokeDelegate();
private void CancelLoading()
{ // will cancel loading this form
this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.BeginInvoke(new InvokeDelegate(CloseThisForm));
}
private void CloseThisForm()
{
this.Close();
}
अच्छी बात यह है कि ऑनफॉर्म क्लोजिंग और ऑनफॉर्म के दौरान आप वास्तव में फॉर्म की स्थिति जानते हैं: यह पूरी तरह से लोड हो गया है, इसलिए आप जानते हैं कि बंद होने पर क्या करना है।
आपको क्या अपवाद मिलता है? –