#c# #winforms
#c# #winforms
Вопрос:
Я использую 2 класса, которые содержат кнопки; Я добавил их кнопки в свою основную форму, и теперь я хочу что-то делать, когда пользователь нажимает на один из них. Например, если пользователь нажимает на кнопку, определенную в class1, текст всех кнопок, определенных в class1, должен измениться на «class1». На самом деле, мне нужно найти класс кнопки, чтобы изменить другие переменные в этом классе.
Комментарии:
1. Мне трудно понять ваш вопрос. Как вы думаете, вы могли бы нажать кнопку редактирования и попытаться немного прояснить это, могут помочь маркированные пункты.
2. Также могут помочь новые строки (клавиша ввода). И код понятнее, чем английский.
3. Я дал вам хороший код для использования, но на самом деле вам следует пересмотреть свой дизайн. Зачем в классах кнопки? Являются ли классы производными от кнопок?
Ответ №1:
В вашем классе назначьте обработчики событий для события click на кнопках, чтобы при добавлении их в форму и щелчке по ним обработчик событий запускался внутри вашего класса, чтобы вы могли получить доступ к свойствам класса.
В противном случае добавьте ссылку на класс к свойству тега кнопки.
class Class1
{
public Button MyButton { get; set; }
public Class1()
{
MyButton = new Button();
MyButton.Click = new EventHandler(MyButton_Click);
}
void MyButton_Click(object sender, EventArgs e)
{
//Do code here
}
}
public partial class Form1 : Form
{
Class1 c1 = new Class1();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
c1.MyButton.Width = 100;
c1.MyButton.Height = 100;
c1.MyButton.Top = 0;
c1.MyButton.Left = 0;
this.Controls.Add(c1.MyButton);
}
или
class Class1 : IButtonClass
{
public Button MyButton { get; set; }
public Class1()
{
MyButton = new Button();
MyButton.Tag = this;
}
public void DoSoemthing()
{
//Do something
}
}
interface IButtonClass
{
void DoSoemthing();
}
public partial class Form1 : Form
{
Class1 c1 = new Class1();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
c1.MyButton.Width = 100;
c1.MyButton.Height = 100;
c1.MyButton.Top = 0;
c1.MyButton.Left = 0;
this.Controls.Add(c1.MyButton);
c1.MyButton.Click = new EventHandler(MyButton_Click);
}
void MyButton_Click(object sender, EventArgs e)
{
IButtonClass c = ((Button)sender).Tag as IButtonClass;
c.DoSoemthing();
}
}
Ответ №2:
В событии нажатия кнопки вы можете попробовать
void button_Click(object sender, EventArgs e)
{
Console.WriteLine((sender as Button).Parent.Name);
}
Комментарии:
1. неправильно, здесь отображается ‘Form1’ вместо имени класса. отправитель — это ОТПРАВИТЕЛЬ события, а не родительский элемент управления
2. @DustinDavis для нажатия кнопки отправителем является кнопка, а кнопка обычно присутствует в родительском контейнере как форма, которая может быть классом операционной системы.
3. Из того, что я прочитал, он хочет класс, в котором содержится кнопка, а не форма. Родительский элемент будет установлен контейнером (form1), а не классом, в котором он находится.
4. опять же, это трудно читать, так что, возможно, вы правы, и я ухожу