نماذج Windows مشروط الحوار الذي بإرجاع كائن بدلا من DialogResult

StackOverflow https://stackoverflow.com/questions/239435

  •  04-07-2019
  •  | 
  •  

سؤال

وأنا كيندا عالقا مع هذا واحد لذلك كنت آمل شخص يمكن ان يساعدني.

وأنا أفعل تطبيق WinForms عناصر وأنا بحاجة لإظهار حوار مشروط (form.ShowDialog) التي تقوم بإرجاع قيمة (يطالب المستخدم بعض القيم ويلتف عليها في وجوه).

وأنا فقط لا يمكن معرفة كيفية القيام بذلك بدلا من إعطاء إشارة إلى كائن أو اعتمادا على نوع من الملكية العامة إلى قراءة البيانات بعد ذلك.

وأود فقط أن يكون ShowDialog العودة شيئا مختلفا، ولكن هذا لا يعمل. غير thare بعض "جيدة" وسيلة للقيام بذلك؟

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

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

المحلول

وإضافة أسلوب ثابت إلى النموذج الخاص بك، مثل هذا:

public class MyDialog : Form
{
    // todo: think of a better method name :)
    public static MyObject ShowAndReturnObject() 
    {
        var dlg = new MyDialog();
        if (new dlg.ShowDialog() == DialogResult.OK) 
        {
            var obj = // construct an instance of MyObject from dlg
            return obj;
        }
        else
        {
           return null; 
        }
    }
}

والآن يمكنك الاتصال هذه من برنامجك هكذا:

var myObject = MyDialog.ShowAndReturnObject();

... وإذا كانوا إلغاء الحوار، سوف myObject تكون فارغة.

والآن، وبعد كل ذلك، أعتقد أن إضافة خاصية لفئة النموذج الخاص بك الذي قمت ثم قراءتها من بعد استدعاء ShowDialog () هو النهج الأفضل.

نصائح أخرى

ويمكنك إنشاء الممتلكات العامة داخل الحوار الذي يمثل القيمة العودة:

/* Caller Code */   
var dlg = new MyDialog();
if(dlg.ShowDialog() == DialogResult.OK)
  MessageBox.Show(dlg.MyResult);

/* Dialog Code */
public string MyResult { get { return textBox1.Text; } }

private void btnOk_Click(object sender, EventArgs e)
{
  DialogResult = System.Windows.Forms.DialogResult.OK;
  this.Close();
}

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

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

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