Вызов _Paint по нажатию кнопки - PullRequest
2 голосов
/ 18 июня 2011

Итак, я создаю пользовательский пользовательский элемент управления в .NET 2.0, и этот пользовательский элемент управления в основном представляет собой комбинированный пользовательский элемент управления (на нем есть изображение с меткой). И эта функция в основном действует как кнопка, ее можно нажимать и т. Д.

Теперь у меня проблема по какой-то причине, стиль рамки не поддерживает 3D-границы ...

Поэтому, когда кнопка не нажата, она должна выглядеть как Border3dStyle.Raised. Затем, когда он нажимается, он должен выглядеть как Border3dStyle.Sunken.

Я добился получения Border3dStyle.Raised, переопределив метод OnPaint. Вот так ...

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        ControlPaint.DrawBorder3D(e.Graphics, this.ClientRectangle, Border3DStyle.Raised);
    }

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

        private void UserInkControl_Paint(object sender, PaintEventArgs e)
    {
        Rectangle borderRectangle = this.ClientRectangle;
        ControlPaint.DrawBorder3D(e.Graphics, borderRectangle, Border3DStyle.Sunken);
    }

Я зарегистрировал это в событии загрузки

        private void UserInkControl_Load(object sender, EventArgs e)
    {
        this.Paint += new System.Windows.Forms.PaintEventHandler(this.UserInkControl_Paint);
    }

Как я могу вызвать UserInkControl_Paint при срабатывании события click?

Ответы [ 4 ]

1 голос
/ 18 июня 2011

Событие Click не будет работать для того, что вы пытаетесь сделать, потому что это конкретное событие вызывается только после того, как кнопка мыши удерживается, а затем отпускается.Вы должны использовать событие MouseDown, чтобы установить логическое свойство (скажем, _isDown) равным true, а затем вызвать .Refresh();используйте событие MouseUp для установки _isDown = false;, затем просто вызовите .Refresh().

. В событии Paint проверьте свойство _isDown и вызовите метод DrawBorder3D с соответствующими параметрами..

0 голосов
/ 18 июня 2011

Вы ищете Invalidate метод .

0 голосов
/ 18 июня 2011
public void UserInkControl_Click(object sender, EventArgs ea)
{
   UserInkControl.Refresh ();  // Causes repainting immediately
   // or
   UserInkControl.Invalidate ();  // Invalidates the whole painting surface, 
   //so when the message loop catches up, it gets repainted.
   // There is also an overload of Invalidate that
   // lets you invalidate a particular part of the button,
   // So only this area is redrawn.  This can reduce flicker.
}
0 голосов
/ 18 июня 2011

Вы можете вызвать «myControl.Refresh ()».Это перерисовает весь контроль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...