2015-08-09 4 views
0

Это моя форма:Как вызвать событие из класса?

namespace Secretary_1._0 
{ 
    public partial class Form1 : Form 
    { 

     public Form1() 
     { 
      InitializeComponent(); 
     } 
    } 

} 

Это мой класс:

namespace Secretary_1._0 
{ 

    public partial class Client 
    { 
     public static Form1 formCall = new Form1(); 


     public static void Clients_Click(object sender, EventArgs e) 
     {  
      formCall.clientPanel.Visible = true; 
      formCall.clientLabel.Visible = true; 
      formCall.addClientButton.Visible = true; 
      formCall.clientListPanel.Visible = true; 
      formCall.clientListPanel.BringToFront(); 
      formCall.addClientLabel.Visible = false; 
      formCall.clientInfoPanel.Visible = false; 
     } 

     public static void addClientButton_Click(object sender, EventArgs e) 
     { 

      formCall.clientPanel.Visible = true; 
      formCall.addClientLabel.Visible = true; 
      formCall.clientInfoPanel.Visible = true; 
      formCall.clientInfoPanel.BringToFront(); 
      formCall.addClientButton.Visible = false; 
      formCall.clientListPanel.Visible = false; 
      formCall.clientAddPropertyPanel.Visible = false; 
     } 

    } 
} 

Отредактировано:

Мой вопрос, как я называю Button_Click событие из класса клиента?

Когда кнопка Клиента нажата в Form1, я хочу вызвать события, расположенные в классе клиента.

Возможно ли это? Я что-то упускаю? Я искал все, но я, кажется, не понимаю.

Я планирую создать много кнопок и хотел бы создать класс для определенных кнопок, чтобы мой form1.cs не был таким длинным.

Любая помощь будет оценена по достоинству. Заранее спасибо.

ответ

1

Просто сделайте это

//Set Access Modifier of that button to public or internal for same namespace 
namespace Secretary_1._0 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
     public void StartClient() 
     { 
      var client = new Client(this); 
      client.RequiredMethod(); //Call here method of client 
     } 
    } 
} 

Теперь

namespace Secretary_1._0 
{ 

    public partial class Client 
    { 
     public Form1 formCall; 

     //Constructor 
     public Client(Form1 form1) 
     { 
       formCall = form1; 
       formCall.someButton.Click += OnSomeButtonClick; 
     } 

     public void OnSomeButtonClick(object sender, EventArgs e) 
     { 
      //Code here to on form1 button click ... 
     } 

     public static void Clients_Click(object sender, EventArgs e) 
     {  
      formCall.clientPanel.Visible = true; 
      formCall.clientLabel.Visible = true; 
      formCall.addClientButton.Visible = true; 
      formCall.clientListPanel.Visible = true; 
      formCall.clientListPanel.BringToFront(); 
      formCall.addClientLabel.Visible = false; 
      formCall.clientInfoPanel.Visible = false; 
     } 

     public static void addClientButton_Click(object sender, EventArgs e) 
     { 

      formCall.clientPanel.Visible = true; 
      formCall.addClientLabel.Visible = true; 
      formCall.clientInfoPanel.Visible = true; 
      formCall.clientInfoPanel.BringToFront(); 
      formCall.addClientButton.Visible = false; 
      formCall.clientListPanel.Visible = false; 
      formCall.clientAddPropertyPanel.Visible = false; 
     } 

    } 
} 

Edit: для решения проблемы с помощью события Follow this поста.

0

1-открытого Form1.Designer.Cs

2-розыскные о ваших кнопках генерируемого кода

3-последняя строка кнопки коды должна быть как то this.btn_insert.Click += new System.EventHandler(this.button1_Click);

Примечание: button1 = ваше имя кнопки

4-Замените последнюю строку я только что упомянул выше и добавьте один вместо this.btn_insert.Click += new System.EventHandler(this.Clients_Click);

Надеюсь, это поможет вам :)

Я должен упомянуть, что этот процесс означает передачу метода делегату (EventHandler), который необходим для правильной работы события.

+0

Извините, я получаю сообщение об ошибке, когда я попробовал это. Я забыл упомянуть, что уже отредактировал Form1.Desighner.cs с (this.Clients.Click + = новый System.EventHandler (Client.Clients_Click);) без круглой скобки, и я не получаю ошибки, но когда кнопка нажата, ничего не происходит. –

+0

Можете ли вы добавить код для передачи метода делегату (EventHandler) –

+0

Чтобы добавить событие click из окна свойств в свой метод (Clients_Click) >>, просто выбрав его из поля со списком –

0

Предполагаю, что вы используете Visual Studio. Зайдите в проводник решений. Нажмите, чтобы развернуть Form1.cs. Найдите класс Form1 в дереве и разверните его. Нажмите на один из ваших компонентов, чтобы заставить VS открыть код для вашего Form1.designer.cs. В нижней части этой страницы должен быть список ваших компонентов. Все они частные. Измените те, которые вам нужны, от частного до внутреннего, и у вас будет доступ к ним из других классов вашей программы. Однако будьте осторожны, я думаю, что вы можете получить какое-то недокументированное поведение. Но это позволит вам получить на этих объектах объекты из другого класса в программе.

+0

Обратите внимание, что это позволяет вам получить доступ к этим элементам управления в другом классе, кроме Form1. Вам все равно нужно следовать совету Мохамеда Эльхаббаба, чтобы заниматься там событиями. – WDS

Смежные вопросы