Пользовательская кнопка C# ничего не делает при нажатии на какие-либо идеи? - PullRequest
1 голос
/ 27 марта 2020

Я только что сделал новую кнопку для моего проекта C# uni. Почему-то кажется, что идеи не работают?

Вот мой код для кнопки:

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSD_A2_WS2435593_WS243380.Classes.FormsaAndControls
{
    class clsFlatButton : Button //control object declaration.
    {
        public clsFlatButton()
        {
            BackColor = Color.FromArgb(225, 236, 244);
            ForeColor = Color.FromArgb(57, 115, 157);
        }

        protected override void OnPaint (PaintEventArgs e) //draws the rectangle and text
        {
            e.Graphics.FillRectangle(new SolidBrush(BackColor), 0, 0, this.Width, this.Height);
            TextFormatFlags flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter;
            TextRenderer.DrawText(e.Graphics, Text, Font, new Point(Width + 3, Height / 2), ForeColor, flags);
        }

        protected override void OnMouseEnter(EventArgs e) //changes on mouse hover it enters the box
        {
            base.OnMouseEnter(e);
            BackColor = onMouseHoverBackColour;
            ForeColor = onMouseHoverForeColour;
        }
        protected override void OnMouseLeave(EventArgs e) //changes on mouse hover when it leaves the box
        {
            base.OnMouseEnter(e);
            BackColor = Color.FromArgb(225, 236, 244);
            ForeColor = Color.FromArgb(57, 115, 157);
        }
        protected override void OnMouseDown(MouseEventArgs e) //changes on mouse click
        {
            base.OnMouseDown(e);
            BackColor = Color.FromArgb(57, 115, 157);
            ForeColor = Color.FromArgb(225, 236, 244);
        }
        protected override void OnMouseUp(MouseEventArgs e)
        {
            base.OnMouseDown(e);
            BackColor = Color.FromArgb(225, 236, 244);
            ForeColor = Color.FromArgb(57, 115, 157);
        }
        //Available settings:
        //Static values for initialisation.
        private Color onMouseHoverBackColour = Color.FromArgb(251, 255, 255);
        private Color onMouseHoverForeColour = Color.FromArgb(6, 64, 106);
        //These will appear on the clsFlatButton control so they can be changed.
        public Color onMouseHoverBackColourChanger
        {
            get { return onMouseHoverBackColour;}
            set { onMouseHoverBackColour = value; }
        }
        public Color onMouseHoverForeColourChanger
        {
            get { return onMouseHoverForeColour; }
            set { onMouseHoverForeColour = value; }
        }
    }
}

Так что, когда я go нажимаю на нее, она меняет цвет даже при наведении, хотя он на самом деле не выполняет код внутри него.

Так что мне больше нечего сказать, но stackoverflow не позволит мне опубликовать этот вопрос без более обычного текста. Итак, вот мы go Полагаю, я мог бы просто вставить lorem ipsum, но я не хочу, чтобы на меня кричали.

РЕДАКТИРОВАТЬ: # 1 Изображение по запросу: Снимок экрана свойств кнопки

1 Ответ

2 голосов
/ 27 марта 2020

Это происходит потому, что вы вызываете

base.OnMouseDown, а не base.OnMouseUp в

protected override void OnMouseUp(MouseEventArgs e)

Я воспроизвел проблему и исправил ее:

    protected override void OnMouseUp(MouseEventArgs e)
    {
        base.OnMouseUp(e);
        BackColor = Color.FromArgb(225, 236, 244);
        ForeColor = Color.FromArgb(57, 115, 157);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...