Member 14809134 Ответов: 2

Цель состоит в том, что я хочу изменить цвет кнопки form1 от нажатия кнопки на usercontrol


мне нужно
При нажатии на элемент управления UserControl нажатии кнопки на form1 кнопка меняет цвет.

Что я уже пробовал:

public Form1()
    {
        InitializeComponent();

        UserControl1 U01 = new UserControl1();
        Form1 f1 = new Form1();
        U01.ButtonClick += button1.BackColor = Color.Red;

    }

    private void Button1_Click(object sender, EventArgs e)
    {
        var user1 = new UserControl1();            
        this.panel1.Controls.Add(user1);

    }


public UserControl1()
   {
       InitializeComponent();

   }
   public event EventHandler ButtonClick
   {
       add { button1.Click += value; }
       remove { button1.Click -= value; }
   }

2 Ответов

Рейтинг:
19

Richard Deeming

Цитата:
public Form1()
{
    InitializeComponent();

    UserControl1 U01 = new UserControl1();
    Form1 f1 = new Form1();
    U01.ButtonClick += button1.BackColor = Color.Red;
}
Вы не добавили элемент управления usercontrol в свою форму, поэтому там не будет кнопки для нажатия.

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

Цитата:
private void Button1_Click(object sender, EventArgs e)
{
    var user1 = new UserControl1();            
    this.panel1.Controls.Add(user1);
}
Здесь вы не добавили обработчик событий в свой usercontrol, поэтому нажатие кнопки ничего не сделает.

Попробуй:
public Form1()
{
    InitializeComponent();
}

private void Button1_Click(object sender, EventArgs e)
{
    var user1 = new UserControl1();
    user1.ButtonClick += UserControlButtonClick;
    this.panel1.Controls.Add(user1);
}

private void UserControlButtonClick(object sender, EventArgs e)
{
    button1.BackColor = Color.Red;
}


Member 14809134

Большое вам спасибо...

Member 14809134

публичное событие EventHandler ButtonClick
{
добавить { button1.Нажмите кнопку += значение; }
удалить { кнопка button1.Клик= стоимость; }
}
Почему эта команда не работает в WPF?

Richard Deeming

Вероятно, потому, что WPF использует RoutedEventHandler вместо EventHandler. Пробовать:

public event RoutedEventHandler ButtonClick
{
    add { button1.Click += value; }
    remove { button1.Click -= value; }
}

Member 14809134

О!! Большое спасибо

Рейтинг:
0

OriginalGriff

Лучший способ сделать это-для UserControl вызвать событие, которое форма может hanlde или нет, как она выбирает.
Вы можете посмотреть здесь: Передача информации между двумя формами, Часть 2: Ребенок-Родитель[^Он делает аналогичные вещи между формами, но процесс - и действительно код - одинаковы для UserControls.