Вопрос

Могу ли я удалить старый прямоугольник, который я нарисовал, и нарисовать новый прямоугольник?

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 году. Ссылка книги SharePoint Designer 2010 Unleashed Hughes, P1329.

Вы можете обойти это, отредактировав форму в InfoPath, если у вас есть лицензирование SharePoint SharePoint.Не удалось, посмотрите, можете ли вы уменьшить количество полей формы как-то.Например, в нашем случае есть некоторая информация, которая введена на создание элемента, но не должна быть изменена после этого, поэтому нам не нужно его в форме редактирования.Мы все еще можем иметь его в форме отображения.

Другой вариант может быть, чтобы иметь несколько форм редактирования для пользователей, которые имеют разные роли, и которые поэтому не нужно видеть каждое поле все сразу.

Надеюсь, это поможет.

Вместо вызова G.DrawRectangle (ручка, 100 100, 100, 200); Поддерживайте прямоугольник как объект, который будет нарисован графическим объектом. Каждый раз, когда вы будете обновлять этот объект прямоугольника с новым, а объект Graphics будет рисовать новый.

Обновление должно очистить старый прямоугольник, и графика будет нарисовать новую.

Вы можете просто использовать VisualBasic PowerPacks, он входит в комплект моей версии Visual Studio 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()

Код описывает сам себя, но если у вас возникнут какие-либо проблемы, просто оставьте сообщение...

Я думаю, используя RATEREDIBLEFRAME правильное решение. Первый вызов нарисуйте прямоугольник, второй вызов, опубликованный его и так далее.

Вот образец кода, 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