У меня есть 2 кнопки (пользовательские кнопки с этого момента), добавленные к элементу управления кнопки (главная кнопка с этого момента), когда я вхожу в главную кнопку, я хочу, чтобы на пользовательских кнопках отображался фон ImageBackground, который работает как исключение. Теперь, когда я вхожу с помощью мыши в пользовательские кнопки, я хочу, чтобы 2 ImageBackground снова появлялся, и когда это происходит, я хочу, чтобы основная кнопка оставалась того же цвета, который был, когда я впервые вводил ее с помощью мыши, что происходит как Я хотел, но кнопки мерцают, И иногда, когда я вхожу в пользовательскую кнопку другой основной кнопки, предыдущая кнопка все еще находится в состоянии mouseEnter. Это почему? Нужно ли использовать async / await или что-то в этом роде?
Я думаю, может быть, это потому, что он должен компилироваться, когда это происходит, и это занимает немного времени, и именно поэтому он мигает, и именно поэтому я думаю, что мне нужно использовать async / await, но это действительно ново для меня, поэтому Я не знаю, как его использовать.
public class MyButton : Button
{
public MyButton()
{
SetStyle(ControlStyles.StandardClick | ControlStyles.StandardDoubleClick | ControlStyles.UserMouse, true);
Margin = new Padding(0);
TextAlign = ContentAlignment.TopCenter;
ImageAlign = ContentAlignment.TopLeft;
TextImageRelation = TextImageRelation.ImageBeforeText;
Font = new Font("Century Gothic", 11f, FontStyle.Bold);
Size = new Size(200, 75);
FlatStyle = FlatStyle.Flat;
BackColor = Color.FromArgb(0, 255, 255, 255);
FlatAppearance.MouseOverBackColor = ColorTranslator.FromHtml("#64A4B3B6");
FlatAppearance.BorderSize = 2;
FlatAppearance.BorderColor = Color.FromArgb(0, 255, 255, 255);
Button[] custom = CustomButtons();
for (int i = 0; i < 2; i++)
{
Controls.Add(custom[i]);
Controls[i].MouseHover += CustomOnMouseEnter;
}
MouseEnter += OnMouseEnter;
MouseLeave += OnMouseLeave;
}
private Button[] CustomButtons()
{
Button delete = new Button();
delete.Name = "delete";
delete.Location = new Point(this.Size.Width - 22, 2);
delete.Size = new Size(20, 20);
delete.FlatStyle = FlatStyle.Flat;
delete.BackColor = Color.Transparent;
delete.FlatAppearance.MouseOverBackColor = ColorTranslator.FromHtml("#64A4B3B6");
delete.FlatAppearance.BorderSize = 0;
Button customize = new Button();
customize.Name = "customize";
customize.Location = new Point(delete.Left - 20, delete.Top);
customize.Size = new Size(20, 20);
customize.FlatStyle = FlatStyle.Flat;
customize.BackColor = Color.Transparent;
customize.FlatAppearance.MouseOverBackColor = ColorTranslator.FromHtml("#64A4B3B6");
customize.FlatAppearance.BorderSize = 0;
Button[] buttons = { delete, customize };
return buttons;
}
private void OnMouseLeave(object sender, EventArgs e)
{
if (Controls.Count != 0)
{
Controls[0].BackgroundImage = null;
Controls[1].BackgroundImage = null;
}
if (BackColor != ColorTranslator.FromHtml("#64389eed"))
{
BackColor = Color.FromArgb(0, 255, 255, 255);
}
}
private void OnMouseEnter(object sender, EventArgs e)
{
if (Controls.Count != 0)
{
Controls[0].BackgroundImage = Resources.cross;
Controls[1].BackgroundImage = Resources.settings;
}
}
private void CustomOnMouseEnter(object sender, EventArgs e)
{
this.BackColor = ColorTranslator.FromHtml("#64A4B3B6");
Controls[0].BackgroundImage = Resources.cross;
Controls[1].BackgroundImage = Resources.settings;
}
}
Вот вывод этого кода
Вы можете увидеть мерцание, когда я ввожу пользовательские кнопки И то, как предыдущая кнопка находится в состоянии MouseEnter, даже если я ее оставил!
Любая помощь очень ценится!