2010-12-05 25 views
9

Daha fazla bilgi edinmek için bir Win Forms uygulaması yapıyorum. Programımda, ana formda bir düğmem var. Tıklandığında başka bir form açılır. yeni bir form başlatıldığındaYeni form kapatılıncaya kadar yürütme işlemini nasıl durdurabilirim?

private void btn_AddCat_Click(object sender, EventArgs e) 
     { 
      this.Invoke(new MethodInvoker(() => 
      { 
       form_NewCat NewCatForm = new form_NewCat(); 
       NewCatForm.Show(); 
      })); 

      MessageBox.Show("Oops!");    
     } 

sorundur, ben yeni bir form kapatılana kadar o noktada duraklatmak için ana formun arkasında kod çalıştırılmasına istiyorum: şöyle kodudur. Örnek olarak, yukarıdaki kodda 'Oops!' Istemiyorum. Yeni form kapanıncaya kadar basılır. Bunu nasıl başarabilirim?

cevap

10

Kullanıcı Arabirimi iş parçacığındayken çağırmanız gerekmez. Düğme tıklama olay işleyicisinde UI iş parçacığısınız. senin form_NewCat kapatmadan önce herhangi bir değere this.DialogResult ayarlarsa

private void btn_AddCat_Click(object sender, EventArgs e) 
{ 
    form_NewCat NewCatForm = new form_NewCat(); 
    var dialogResult = NewCatForm.ShowDialog(); 
    MessageBox.Show("Oops!");    
} 

Sen Evet, Hayır, vs, iptal, OK için DialogResult kontrol edebilirsiniz. Bu, kullanıcının formu/diyalogdan nasıl çıktığını işaret etmenin alışılmış yoludur.

+0

sayesinde gerek. Çözümü uygulayacağım. – xbonez

+0

Olay işleyicisini tam olarak gösterdiğim şekilde değiştirdim. Yeni formda bir iptal düğmesi var. İptal düğmesinin olay işleyicisi bunu yürütür.Close(). Ancak, iptal düğmesine bastığımda, form kaybolur ve tekrar görünür. İsteği iptal etmek formu kapatır. Neden böyle? Yeni formum iki kez görüntüleniyor. – xbonez

+0

@xbonez, tuhaf, formu gösteren başka bir kodunuz olmadığından emin misiniz? Kurucuda olduğu gibi mi? –

5

Yalnızca ShowDialog'a Göster; Bu ayrıca, formun kendisinin belirli bir durumla çıkıp çıkmadığını (tamam, iptal et, vs.) belirtip belirtmediğine dair bir dönüş değeri elde edelim.

13

Değişim

NewCatForm.ShowDialog(); 
6

satır

NewCatForm.Show(); 

Sen kalıcı bir iletişim kutusu istiyorum ve sen NewCatForm.ShowDialog();

İlgili konular