سؤال

كيف يمكن للمرء أن يتجول في إنشاء مراسلة غير معدلة؟ هل يجب علي إنشاء فئة نموذج Windows الخاصة بي واستخدام ذلك؟ إذا كان الأمر كذلك ، هل هناك طريقة سهلة لإضافة أيقونة تحذير (بدلاً من إدخال صورتي الخاصة) وتغيير حجمها بناءً على حجم النص؟

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

المحلول

سيكون عليك إنشاء نموذج واستخدام Show() لعرضها مجهولة. MessageBox.Show(...) تصرفت الوسائط كما هو موضح في المثال من قبل غيبوز. يتم عرض "وصف الرسالة" حتى يضغط المستخدم على زر.

مع MessageBox.Show(...) يمكنك الحصول على النتيجة بمجرد إغلاق مراسلة الرسائل ؛ باستخدام مربع رسالة غير معدلة ، يجب أن يكون لآلية مثل الحدث للرد عندما يقوم المستخدم في النهاية بتحديد شيء ما في مربع الرسائل الخاص بك.

نصائح أخرى

إذا كنت بحاجة إلى مربع رسالة يعرض نفسه فقط بينما يستمر الرمز الخاص بك في التشغيل في الخلفية (لا يزال المربع مشروطًا وسيمنع المستخدم من استخدام Windows الأخرى حتى يتم النقر فوق موافق) ، يمكنك دائمًا بدء تشغيل مربع الرسالة في مؤشر ترابطه الخاص واستمر في القيام بما تفعله في الموضوع الأصلي:

    // Do stuff before.
    // Start the message box -thread:
    new Thread(new ThreadStart(delegate
    {
      MessageBox.Show
      (
        "Hey user, stuff runs in the background!", 
        "Message",
        MessageBoxButtons.OK,
        MessageBoxIcon.Warning
      );
    })).Start();
    // Continue doing stuff while the message box is visible to the user.
    // The message box thread will end itself when the user clicks OK.

بعد كتابة الكود ، يمكنك إنشاء نموذج صغير يقوم في المُنشئ بما يلي

  • يأخذ سلسلة معلمة كرسالة لعرضها
  • يملأ ملصق على النموذج مع هذه السلسلة
  • يحمل أيقونة مع واحد مما يلي (تمر في التعداد إلى المُنشئ)
    • SystemIcons.Application
    • SystemIcons.Asterix
    • SystemIcons.Error
    • SystemIcons.Exclamation
    • SystemIcons.Hand
    • SystemIcons.Information
    • SystemIcons.Question
    • SystemIcons.Shield
    • SystemIcons.Warning
    • SystemIcons.WinLogo
  • مكالمات العرض () والتي ستسبب ذلك في مربع حوار مشروط

إذا أردت حقًا ، فيمكنك الاستماع إلى حدث يتم إطلاقه عند الضغط على زر OK.

يمكنك استخدام أيقونة تحذير النظام القياسية باستخدام SystemIcons

يجب عليك إما استخدام النموذج والاتصال showdialog ()

واستخدام الرموز

MessageBoxIcon.Warning

// لا commnet

object sync = new object();
ManualResetEvent Wait = new ManualResetEvent();
//you should create a place holder named MessageData for Message Data.
List<MessageData> Messages = new List<MessageData>();
internal void ShowMessage(string Test, string Title, ....)
{
    MessageData MSG = new MessageData(Test, Title);
    Wait.Set();
    lock(sync) Messages.Add(MSG);
}
// another thread should run here.
void Private_Show()
{
    while(true)
{
        while(Messsages.Count != 0)
        {
            MessageData md;
            lock(sync)
            {
                md = List[0];
                List.RemoveAt(0);
            }
            MessageBox.Show(md.Text, md.Title, md....);
        }
        Wait.WaitOne();
    }
}

يحتاج إلى المزيد من المواضيع والمزيد من التعليمات البرمجية (ليس لدي وقت كاف للكتابة) لصناديق الرسائل المتزامنة.

ملاحظة: سيؤدي ذلك إلى إنشاء مربع حوار مشروط ، وهو ما يطرحه السؤال

هنا رمز عينة

if (MessageBox.Show("Description of the message", "Caption text", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.Yes)
{
    // Do some stuff if yes pressed
}
else
{
    // no pressed
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top