Как я могу создать невидимую (и активируемую) кнопку за меткой? - PullRequest
0 голосов
/ 30 января 2020

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

Это то, чего я достиг до сих пор.

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 30 января 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();
        }
    }
0 голосов
/ 30 января 2020

Пузырьковые события не поддерживается стандартом в 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+"";
        }
...