Pergunta

Posso excluir o retângulo antigo que desenhei e desenhar um novo retângulo?

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();
}

Nenhuma solução correta

Outras dicas

Eu acho que um receptor de evento com um manipulador ItemUpdatado conectado à sua lista de tarefas é o caminho a percorrer.

aqui é um linko MSDN que você vai começar se você é novo em receptores de eventos.

Isso geralmente é feito mantendo uma coleção de objetos que você deseja desenhar. O clique do mouse deve atualizar esta coleção e informar a janela (ou a região de afeto) para atualizar. Isso tem a enorme vantagem de preservar o que você desenhou se a janela for movida para fora da tela, escondida atrás de outras janelas, minimizadas, etc.

Para uma solução rudimentar, crie uma hierarquia de tipos de formas desenhados derivados de uma classe de forma abstrata comum e, por exemplo, uma lista para a coleção. A classe Base Shape terá um método de empate abstrato que as classes derivadas substituem.

Para uma solução mais industrial, procure gráficos de cenas 2-D.

Pode -se usar Graphics.Save() e Graphics.Restore(state) Métodos para isso. Por exemplo:

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

Eu tenho lutado por isso por dias.Há um limite de 70 campos em um formulário de edição personalizado, e isso inclui anexo, modificado, modificado por, criado, criado por.Eu estou no SP2010, mas a questão também é em 2013. Referência ao livro SharePoint Designer 2010 Unleashed por Hughes, P1329.

Você pode contornar isso editando para o formulário em InfoPath se você tiver o licenciamento corporativo do SharePoint.Falha disso, veja se você pode reduzir o número de campos de formulário de alguma forma.Por exemplo, no nosso caso, há algumas informações inseridas na criação de itens, mas não devem ser alteradas a partir de então, por isso não precisamos no formulário de edição.Ainda podemos tê-lo no formulário de exibição.

Outra opção pode ser ter vários formulários de edição para usuários que têm diferentes funções e que, portanto, não precisam ver todos os campos de uma só vez.

Espero que isso ajude.

Em vez de ligar para G.Drawrectangle (caneta, 100.100, 100, 200); , mantenha o retângulo como um objeto que será desenhado pelo objeto gráfico. Cada vez que você atualizará este objeto retângulo com o novo e o objeto gráfico desenhará o novo.

A atualização deve limpar o retângulo antigo e os gráficos desenharão o novo.

Você pode apenas usar VisualBasic PowerPacks, ele está incluído na minha versão do Visual Studio 2008

Aqui está um exemplo de código que desenhará um retângulo sobre um TextBox, ou seja,Estou dando uma borda personalizada

    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()

O código é autodescritivo, mas se você tiver algum problema, deixe uma mensagem...

Eu acho que usar DrawResversibleFrame é a solução certa. A primeira chamada Desenhe o retângulo, a segunda chamada destraurá -la e assim por diante.

Aqui está um código de amostra, um CLIC no botão fará com que o retângulo apareça/desapareça.

Rectangle pRect = new Rectangle(10, 10, 20, 20);
private void rect_Click(object sender, EventArgs e)
{
  ControlPaint.DrawReversibleFrame(pRect, this.BackColor, FrameStyle.Thick);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top