سؤال

هل يمكنني حذف المستطيل القديم الذي رسمته ورسم مستطيل جديد?

private void panel1_MouseClick(object sender, MouseEventArgs e)
{
        Graphics g = this.panel1.CreateGraphics();
        Pen pen = new Pen(Color.Black, 2);

        g.DrawRectangle(pen, 100,100, 100, 200);
        g.dispose();
}

لا يوجد حل صحيح

نصائح أخرى

أعتقد أن جهاز استقبال الحدث مع معالج مستغل متصل بقائمة المهام الخاصة بك هو الطريق للذهاب.

هنا رابطMSDN التي ستحصل عليها إذا كنت جديدة على أجهزة الاستقبال الأحداث.

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

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

للحصول على حل أكثر قوة الصناعية ، ابحث حولها عن الرسوم البيانية للمشهد ثنائي الأبعاد.

يمكن للمرء استخدام Graphics.Save() و Graphics.Restore(state) طرق لذلك. فمثلا:

private void SaveRestore2(PaintEventArgs e)
{
    // Translate transformation matrix.
    e.Graphics.TranslateTransform(100, 0);

    // Save translated graphics state.
    GraphicsState transState = e.Graphics.Save();

    // Reset transformation matrix to identity and fill rectangle.
    e.Graphics.ResetTransform();
    e.Graphics.FillRectangle(new SolidBrush(Color.Red), 0, 0, 100, 100);

    // Restore graphics state to translated state and fill second

    // rectangle.
    e.Graphics.Restore(transState);
    e.Graphics.FillRectangle(new SolidBrush(Color.Blue), 0, 0, 100, 100);
}

http://msdn.microsoft.com/en-us/library/system.drawing.graphics.restore.aspx

لقد كنت أقاتل هذا لعدة أيام.يوجد حد 70 حقلا في نموذج تحرير مخصص، وهذا يشمل المرفقات، المعدلة، تعديلها، التي تم إنشاؤها، تم إنشاؤها بواسطة.أنا في SP2010، لكن المشكلة هي أيضا في عام 2013.

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

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

نأمل أن يساعد هذا.

بدلاً من استدعاء G.DrawRectangle (Pen ، 100،100 ، 100 ، 200) ؛ ، حافظ على المستطيل ككائن سيتم رسمه بواسطة كائن الرسومات. في كل مرة ستقوم بتحديث كائن المستطيل هذا باستخدام واحد جديد وسيقوم كائن الرسومات برسم الكائن الجديد.

يجب أن يقوم التحديث بمسح المستطيل القديم والرسومات سوف يرسم الجهاز الجديد.

يمكنك فقط استخدام فيسوالباسيك بويرباكس ، يتم تضمينه مع نسختي من فيسوال ستوديو 2008

في ما يلي نموذج رمز يرسم مستطيلا فوق مربع نص ، أي.أنا يعطيها الحدود المخصصة

    Dim x = TextBox1.Location.X
    Dim y = TextBox1.Location.Y
    Dim width = TextBox1.Width
    Dim height = TextBox1.Height
    Dim ShapeContainer1 As New Microsoft.VisualBasic.PowerPacks.ShapeContainer
    Me.Controls.Add(ShapeContainer1)
    Dim RectangleShape1 As New Microsoft.VisualBasic.PowerPacks.RectangleShape
    ShapeContainer1.Shapes.AddRange(New Microsoft.VisualBasic.PowerPacks.Shape() {RectangleShape1})
    RectangleShape1.Location = New System.Drawing.Point(x - 1, y - 1)
    RectangleShape1.Size = New System.Drawing.Size(width + 1, height + 1)
    RectangleShape1.BorderColor = Color.MistyRose
    ShapeContainer1.Refresh()

الكود هو وصف ذاتي ولكن إذا كان لديك أي مشكلة ، فما عليك سوى ترك رسالة...

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

فيما يلي رمز عينة ، سيجعل clic على الزر يظهر/يظهر المستطيل.

Rectangle pRect = new Rectangle(10, 10, 20, 20);
private void rect_Click(object sender, EventArgs e)
{
  ControlPaint.DrawReversibleFrame(pRect, this.BackColor, FrameStyle.Thick);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top