سؤال

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

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

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

المحلول

وهنا هو كيفية جعل مربع حوار مخصص صغيرة في ويندوز موبايل الذي يبدو مثل هذا:

بديل النص http://www.freeimagehosting.net/uploads/b8fb5421d6.jpg

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

وهكذا كان لديك وهمية الثلاثة. أسهل طريقة لوهمية الحدود وشريط العنوان هو جعل BackColor في شكل SystemColors.WindowFrame الخاص بك، ثم وضع علامة (حيث تقول "الحوار" في الصورة) مع ون_الخلفية = SystemColors.Highlight وForeColor = SystemColor.HighlightText (وجريئة في الخط)، ثم وضع لوحة مع ون_الخلفية = SystemColors.Window حيث ترى الأبيض في الصورة. لديك على قرص مواقف وأحجام التسمية ولوحة بحيث يكون لديك حدود 1 بكسل (والذي هو مجرد ون_الخلفية النموذج الخاص بك تظهر من خلال).

لتمكين النموذج إلى الانجرار نحو بواسطة شريط العنوان في وهمية، وإضافة هذا الرمز إلى النموذج (وبالطبع كان لديك سلك يصل الأحداث، أيضا):

private bool _Moving = false;
private Point _Offset;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    _Moving = true;
    _Offset = new Point(e.X, e.Y);
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    if (_Moving)
    {
        Point newlocation = this.Location;
        newlocation.X += e.X - _Offset.X;
        newlocation.Y += e.Y - _Offset.Y;
        this.Location = newlocation;
    }
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
    if (_Moving)
    {
        _Moving = false;
    }
}

وثمة مشكلة أخرى هي أن للم يكن هناك شريط العنوان الحقيقي، وليس هناك طريقة للمستخدم لإغلاق النموذج. لديك لإضافة زر موافق (أو انهيار)، ووضع هذا في الحدث Click للزر:

this.DialogResult = DialogResult.OK;

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

وجوابي أخرى لديها مزيد من التفاصيل على الحصول على المعلومات مرة أخرى من الحوارات المخصصة.

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

نصائح أخرى

إذا كنت تريد فائقة بسيطة ولكنها [ر] حل القبيح، يمكنك تضمين إشارة في المشروع إلى Microsoft.VisualBasic، الذي يتيح لك استخدام InputBox وظيفة VB مثل هذا:

string s = Microsoft.VisualBasic.Interaction.InputBox("prompt text",
    "title text", "default value", 0, 0);

والحوار تملأ الشاشة بأكملها، ولكن سهلة الاستعمال. ولكن هو قبيح للغاية، وكما ذكرت.

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

لالقوائم الخاصة بك، عليك فقط إضافة نموذج (يسمى CustomDialog) لمشروعك واسحب النص (textBox1)، تسمية (LABEL1)، وعلى زر (المسمى "OK") على ذلك.

لتعيين نص التسمية، إضافة معلمة إلى منشئ للنموذج مثل هذا:

public CustomDialog(string textCaption)
{
    label1.Text = textCaption;
}

لفضح النص الذي تم إدخاله إلى الطالب، إضافة هذا الرمز إلى النموذج:

public override string Text
{
    get
    {
        return textBox1.Text;
    }
}

في الحدث انقر فوق الزر موافق، ووضع هذا الرمز:

this.DialogResult = DialogResult.OK; // this will close the form, too

لاستخدام هذا الحوار من النموذج الرئيسي، يمكنك إنشاء مثيل من هذا النموذج، وتبين أنها تحقق لمعرفة أن الزر موافق تم النقر، ومن ثم قراءة الخاصية Text لها (والتي ترجع ما أدخلها المستخدم) كما يلي:

using (CustomDialog dialog = new CustomDialog("What is your name"))
{
    if (dialog.ShowDialog(this) == DialogResult.OK)
    {
        string enteredText = dialog.Text;
    }
}

ويمكنك الحصول على مربي الحيوانات، ولكن هذه هي الأساسيات.

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