الرسومات.واضح على عنصر تحكم نموذج ويندوز أيضا مسح السيطرة نفسها - كيفية منع هذا?

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

سؤال

أحاول رسم مستطيل اختيار مخصص على مربع صور ، باستخدام الطريقة أدناه:

    void _drag_UpdateView(bool clearOnly, MouseEventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("UpdateView");
        using (Graphics g = this.i_rendered.CreateGraphics())
        {
            g.Clear(Color.Transparent);
            if (clearOnly)
                return;
            int px = (_drag_start.X > e.Location.X)?e.Location.X:_drag_start.X;
            int py = (_drag_start.Y > e.Location.Y)?e.Location.Y:_drag_start.Y;
            if (px < 0)
                px = 0;
            if (py < 0)
                py = 0;
            int wx = Math.Abs(e.Location.X-_drag_start.X);
            int wy = Math.Abs(e.Location.Y-_drag_start.Y);
            g.DrawRectangle(Pens.LightBlue, px, py, wx, wy);
        }
    }

كلما اتصلت:

g.Clear(Color.Transparent);

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

يمكن لأي شخص أن يصف ما هو الخطأ?

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

المحلول

لا ترسم سيطرتك داخل أي طريقة أخرى غير OnPaintBackground أو OnPaint.

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

داخل Paint أنت لا تحتاج حتى إلى استخدام CreateGraphics, ، سياق الرسومات داخل PaintEventArgs كائن حتى تغيير التعليمات البرمجية الخاصة بك إلى:

void DoPainting(object sender, PaintEventArgs e)
{
    // Do your calculations
    e.Graphics.DrawRectangle(Pens.LightBlue, px, py, wx, wy);
}

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

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