سؤال

هل هناك طريقة يمكنني تحديد ShowDialog () أن لا يكون أسمى؟ لقد ألقيت نظرة على جميع الأسئلة المتعلقة SO، وليس <م> تماما يقابل وضعي.

ما أقوم به هو فتح WinForm جديد من عمود زر داتاغريدفيف. هذا الشكل الجديد يسحب المعلومات من عدد قليل من الجداول سكليتي ويسمح للمستخدم لإضافة معلومات إلى الصف تم النقر على زر.

وI فتح WinForm باستخدام رمز أدناه. يمكنني استخدام الأسلوب ShowDialog () بحيث يمكنني معرفة ما إذا كان المستخدم بحفظ المعلومات في شكل أو يلغي ذلك.

Pay_Bill_Window paywindow = new Pay_Bill_Window(getClickedRowID);
if (paywindow.ShowDialog() == DialogResult.OK)
{
    FillPendingPaymentDataGrid(dbAccess.GetPendingBills());
}

وأفعل هذا حتى أستطيع أن أقول إذا كنت بحاجة لإعادة تحميل المعلومات في داتاغريدفيف.

والمعلومات يمكن للمستخدم ملء في إطار هي من مصادر أخرى، مثل متصفح الإنترنت، وذلك بعد شكل يكون على رأس كل التطبيقات ليست مثالية.

هل هناك طريقة يمكنني وقف نافذة من كونه على رأس كل التطبيقات (أعلى الأكثر في بلدي سلسلة من النوافذ على ما يرام)، أم أن هناك طريقة لمعرفة ما زر ينقر المستخدم على نموذج آخر (في الأساس، باستخدام paywindow.Show() ومشاهدة لنوع مختلف من العودة)؟

وشكرا على اي مساعدة!

هل كانت مفيدة؟

المحلول

واستخدام شيء من هذا القبيل: form1:

  private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2();
            frm.Show();
            frm.FormIsClosing += frm_FormIsClosing;

        }

        void frm_FormIsClosing(object sender, DialogResult rsl)
        {
            if (rsl == System.Windows.Forms.DialogResult.Yes)
                MessageBox.Show("We got it");
        }

وform2:

   public delegate void IsClosing(object sender, DialogResult rsl);

        public event IsClosing FormIsClosing;


        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
            FormIsClosing(this, System.Windows.Forms.DialogResult.Yes);
        }

وبعد ذلك قمت بإغلاق Form2 ومن FormIsClosing الحرائق ويمكنك قبض عليه في from1؛)

نصائح أخرى

وافتراضيا يجب شكلا لا تكون العلوي في "لجميع التطبيقات الشعور". إذا كنت ترى أن السلوك فمن المحتمل أنه تم تعيين الخاصية في المصمم. إما ضبطه الممتلكات في المصمم أو محاولة ما يلي.

using ( Form form = CreateMyForm() ) {
  form.TopMost = false;
  form.ShowDialog(parent);
  ...
}

وأنا لا يمكن العثور على طريقة لمنع النموذج من كونها أعلى أكثر عندما تظهر مع ShowDialog() (هذا يدل على النموذج مشروط، وأنا لا أعرف كيف لتجاوز ذلك).

ومع ذلك، وجدت وسيلة لمراقبة النموذج الثاني، عندما تظهر مع Show()، من خلال مشاهدة لهذا الحدث form.Disposed في <لأ href = "https://stackoverflow.com/questions/677056/opening-forms-in -c "> هذا السؤال ستاكوفيرفلوو .

إيان :

Form2 form2 = null;

void button_click(object sender, EventArgs e) 
{     
    if(form2 == null)   
    {
        form2 = new Form2();
        form2.Disposed += new EventHandler(f_Disposed);
        form2.Show();
    }
}

void f_Disposed(object sender, EventArgs e) 
{
    form2 = null; 
}

وبقدر ما أستطيع أن أقول، وهذا لا يسمح لي أن أرى لماذا تم إغلاق النموذج (مثل مع DialogResult)، وبالتالي فإن وقع الحدث كل وقت إغلاق النموذج، والتي على ما يرام ل ضعي.

paywindow.ShowDialog(this)

ويجب أن تعمل. تقول المعلمة إضافية كيف أن الأصل هو وسيجعل من طبقة على رأس الوالد، ولكن ليس أسمى. أسمى يعني أن نافذة حول عصا على سطح المكتب حتى عند تفعيل نافذة أخرى. هذا ليس السلوك الافتراضي لShowDialog. كما ذكر JaredPar، تعيين النموذج الخاص بك / نافذة إلى العلوي = كاذبة ليكون صحيحا.

paywindow.ShowDialog(this)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top