Shlop
@Shlop
Full Stack Developer (PHP/Laravel/JavaScript)

Как создать копию кнопки в C#?

Здравствуйте, подскажите пожалуйста как создать копию кнопки в WindowsForm (C#) ?
59d37aae58869809048826.jpeg

Если кратко ввести в структуру программы, тут 3 объекта:

NewClassProgram NewObject1 = new NewClassProgram();
NewClassProgram2 NewObject2 = new NewClassProgram2();
NewClassProgram3 NewObject3 = new NewClassProgram3();


По нажатию на каждую кнопку (button1,button2,button3) соответствующий объект попадает в PropertyGrid (точнее его поля)

private void button1_Click(object sender, EventArgs e)
        {
            GridObject.SelectedObject = NewObject1;
        }


Сейчас я сделал функции Drag-and-drop, теперь эти кнопки можно перетащить в другую область(В). И вопрос возник теперь в том, как сделать так, что-бы кнопка оставалась на месте в области(А), а её копия попадала в другую область, то есть в область (В).
Заранее большое спасибо за ответ.
  • Вопрос задан
  • 786 просмотров
Пригласить эксперта
Ответы на вопрос 2
petermzg
@petermzg
Самый лучший программист
Когда вы в дизайнере размещаете кнопки на форме, то студия помещает код создания в метод
InitializeComponent.
Посмотрите как там сделано создание, привязка событий и указание родителя и по аналогии сделайте у себя в коде.
Ответ написан
@BashkaMen
C# программист
При начале перетаскивания запомни координаты кнопки, если перетащил на B, то сделай копию и поставь в предыдущее место.
Так как кнопка у нас класс а не структура, то мы не можем просто скопировать методом A = B; ибо тип класс ссылочный и все что сделает текущая операция это создаст ещё одну ссылку на тот же обьект. Нужно именно перенести значения в новый обьект,примерно так:
var copyBtn = new Button
{
 // А тут перенести нужные свойства.
Location = myBtn.Location,
Text = myBtn.Text,

};
// И наверное тоже главное что б кнопка делала тоже самое что и та которую копируем.
copyBtn.Click += //тут просто название метода на которую подписана кнопка, если метод в этом контексте. (myBtn_OnClick).

// В завершении мы должны добавить кнопку на ту панель (B) припустим у нее имя panel1

panel1.Controls.Add(copyBtn);

// Ну а тут верни кнопку обратно.

myBtn.Location = SaveLocation;


В коде могут быть ошибки так как на формах я уже давненько не пишу, да и этот код написан прямо тут, а не в студии с Intelisence :)

Надеюсь поможет
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы