Я не нашел способа в C # создать кнопку, которая будет поддерживать непрозрачность - вместо того, чтобы просто появляться при вызове метода show, чтобы иметь возможность медленно скрывать его.
Я создал свою кнопку, и я хотел бы знать, что вы думаете о реализации.
По сути, Я создал форму Windows , которая поддерживает свойство непрозрачности и обрабатывал все угловые случаи, связанные с «добавлением» формы в другую форму, а именно:
- место изменения события
- владелец формы потерял фокус
Форма состоит из метки, представляющей текст кнопки, и все.
Конструктор формы получает текст для метки, отображается желаемый размер кнопки и скорость (на основе Enum) для кнопки.
В метод загрузки формы метка находится в середине кнопки
когда щелкнул ярлык или сама форма , выполняется простая графика и возникает событие для того, кто его ловит.
Мой код:
- Создана форма с именем buttonForm
Конструктор
InitializeComponent();
this.Owner = owner;
_buttonText = buttonText;
_buttonSize = buttonSize;
_usedSpeedOpacity = SelectSpeedOpacity(showSpeed);
Метод для иллюстрации команды щелчка - вызывается, когда пользователь нажимает на форму и на сам ярлык:
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();
}
форма загрузки - расположение метки в центре элемента управления и т. Д.
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;
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();
Обновить метод местоположения, чтобы при перемещении родительской формы я вызывал этот метод
this.Location = new Point(
this.Location.X - (ParentFormLocation.X - newLocation.X),
this.Location.Y - (ParentFormLocation.Y - newLocation.Y));
ParentFormLocation = newLocation;
Событие моего нажатия кнопки
Заранее спасибо,
Оз.