Советы по реализации для кнопки, которая поддерживает прозрачность - PullRequest
0 голосов
/ 20 февраля 2012

Я не нашел способа в C # создать кнопку, которая будет поддерживать непрозрачность - вместо того, чтобы просто появляться при вызове метода show, чтобы иметь возможность медленно скрывать его.

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

По сути, Я создал форму Windows , которая поддерживает свойство непрозрачности и обрабатывал все угловые случаи, связанные с «добавлением» формы в другую форму, а именно: - место изменения события - владелец формы потерял фокус

Форма состоит из метки, представляющей текст кнопки, и все.

Конструктор формы получает текст для метки, отображается желаемый размер кнопки и скорость (на основе Enum) для кнопки. В метод загрузки формы метка находится в середине кнопки

когда щелкнул ярлык или сама форма , выполняется простая графика и возникает событие для того, кто его ловит.

Мой код:

  1. Создана форма с именем buttonForm
  2. Конструктор

            InitializeComponent();
            this.Owner = owner;
            _buttonText = buttonText;
            _buttonSize = buttonSize;
            _usedSpeedOpacity = SelectSpeedOpacity(showSpeed);
    
  3. Метод для иллюстрации команды щелчка - вызывается, когда пользователь нажимает на форму и на сам ярлык:

        this.Location = new Point(this.Location.X + 1, this.Location.Y);
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        Thread.Sleep(50);
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
        this.Location = new Point(this.Location.X - 1, this.Location.Y);
        if (Button_Clicked != null)
        {
            Button_Clicked();
        }
    
  4. форма загрузки - расположение метки в центре элемента управления и т. Д.

        labelButtonText.Text = _buttonText;
        this.Size = _buttonSize;
        double remainning = this.Width - labelButtonText.Size.Width;
        Point labelNewLocation = new Point(
            (int)(remainning / 2),
            (int)(this.Height / 2 - this.Font.Height / 2));
        labelButtonText.Location = labelNewLocation;
    
  5. FadeShow (и FadeHide одинаковые)

        int tempCounter = 0;
        Opacity = 0;
        Show();
        while (tempCounter <= 1000)
        {
            if (Opacity == 1.0)
            {
                break;
            }
            if (tempCounter % 10 == 0)
            {
                Opacity += _usedSpeedOpacity;
            }
            Refresh();
            tempCounter++;
        }
        this.Visible = true;
        this.BringToFront();
    
  6. Обновить метод местоположения, чтобы при перемещении родительской формы я вызывал этот метод

        this.Location = new Point(
            this.Location.X - (ParentFormLocation.X - newLocation.X),
            this.Location.Y - (ParentFormLocation.Y - newLocation.Y));
        ParentFormLocation = newLocation;
    
  7. Событие моего нажатия кнопки

Заранее спасибо,

Оз.

1 Ответ

0 голосов
/ 21 февраля 2012

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

Хотя приведенный ниже ответ не является 100% правильным без вашего кода, его сложно показать.

void timer_Tick(object sender, EventArgs e)
        {            
            if (btnName.Opacity < 100)
            {
                btnName.Opacity++;
                timer2.Stop();
                timer2.Interval = 5000;
                timer2.Start();
            } else {
                timer2.Stop();
           }
        }
...