Как я могу создать невидимую (и интерактивную) кнопку за меткой?

Пытаюсь сделать невидимую кнопку за ярлыком.

Это то, чего я достиг на данный момент.

Идея заключается в том, что если я нажимаю нижнюю часть числа, оно должно уменьшаться. Если я щелкаю верхнюю часть числа, оно должно увеличиваться, это то, чего я хочу достичь.

Вот как я сделал свою кнопку невидимой:

button2.FlatStyle = FlatStyle.Flat; 
button2.FlatAppearance.BorderSize = 0; 
button2.FlatAppearance.MouseDownBackColor = Color.Transparent; 
button2.FlatAppearance.MouseOverBackColor = Color.Transparent; 
button2.BackColor = Color.Transparent; 

Единственная проблема с этим заключается в том, что если я перемещаю свою кнопку на ярлык, он скрывает ярлык. (Я пытался отправить кнопку на задний план, но когда я это сделал, она перестала работать.)

Если у вас есть решение, поделитесь им со мной :)


person csbalint    schedule 30.01.2020    source источник


Ответы (2)


Всплытие событий не поддерживается стандартом в winforms, он доступен по умолчанию в WPF, более простой решение вашей проблемы - обработать MouseClick событие вашего лейбла

    private void numLabel_MouseClick(object sender, MouseEventArgs e)
        {
            int num = 0;
            int.TryParse(numLabel.Text, num);
            if (e.Y > numLabel.Size.Height / 2) num--; else num++;
            numLabel.Text = num+"";
        }
person jalsh    schedule 30.01.2020

Вы столкнулись с проблемой воздушного пространства, если вы видите метку, вы не сможете нажать кнопку. Почему бы не попробовать использовать событие MouseUp для меток, чтобы получить координаты мыши, а затем сравнить их положение в метке, чтобы определить, увеличивать или уменьшать метку.

Что-то вроде этого:

private void label1_MouseUp(object sender, MouseEventArgs e)
    {
        int temp;

        if (e.Y < label1.Height / 2)
            { if (int.TryParse(label1.Text, out temp))
                label1.Text = (temp += 1).ToString();}
        else
        {
            if (int.TryParse(label1.Text, out temp))
                label1.Text = (temp -= 1).ToString();
        }
    }
person Mark Hall    schedule 30.01.2020