2012-04-19 2 views
0

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

У меня есть две формы, и мне нужно, чтобы кнопка нажала на одну форму, чтобы установить свойство включенной кнопки на моей второй форме в true.

Как я уже сказал, я пробовал несколько методов и пока не работал.

+1

вы можете сделать это с помощью мероприятия. [Вот пример] (http://stackoverflow.com/a/6382869/754438) – Reniuz

ответ

1

Вы можете сделать кнопку на второй форме PUBLIC (вы можете сделать это в файле * cs или в окне свойств «свойства» в VS) и добавить экземпляр второй формы к первой. Или вы можете объявить delegate во второй форме, чтобы изменить свойства кнопки и вызвать ее в первом. На самом деле существует больше вариантов, только что упомянутых 2 :)

+0

В текущем методе, который пытается использовать обе кнопки, являющиеся общедоступными, а затем в коде кнопки нажмите на мою вторую форму, я создаю экземпляр моего parent class Main btnenable = new Main(); и сделайте это btnenable.btnaddlvl4.Enabled = true; но это не сработало. – nexus490

+1

@ nexus490, stop..by пишет 'Main btnenable = new Main();' вы не получите INSTANCE существующей формы. Вы создадите новую (см. «Новое» ключевое слово http://msdn.microsoft.com/ ан-нас/библиотека/51y09td4 (v = vs.71) .aspx). Если вы хотите сделать это таким образом - вы, вероятно, должны добавить свойство к дочерней форме типа родителя, например «Основной родительский элемент {get; set;}» и установить его в родительской форме при создании экземпляра дочернего элемента: «Ребенок-ребенок = new Child(); child.Parent = this; '. Немного беспорядочно, но надеюсь, что это поможет вам заставить ваш код работать. @Reniuz предоставил лучшее решение с событиями, чтобы увидеть его комментарий. – 0x49D1

+0

Ответ, предоставленный нам Рениусом, меня смутил, я не мог следовать за ним. Как бы я это сделал, вместо того, чтобы использовать новые? – nexus490

1

Вы должны создать общедоступный метод в вашей второй форме, который включает кнопку, и добавить ссылку на вторую форму в вашей первой форме. Затем в событии OnClick просто вызовите этот метод.

Вот пример код, я создаю:

Class1.cs

class Class1 
    { 

      Form2 form2 = new Form2(); 
      Form1 form1; 

      public Class1() 
      { 
       //Application.Run(form1); 
       //Application.Run(form2); 
       form1 = new Form1(form2); 
       form1.ShowDialog(); 

      } 

    } 

Form2.cs

public partial class Form2 : Form 
    { 
     public Form2() 
     { 
      InitializeComponent(); 
     } 

     public void enableB() 
     { 
      button1.Enabled = true; 
     } 
    } 

Form1.cs

public partial class Form1 : Form 
    { 
     Form2 f2; 
     public Form1(Form2 f) 
     { 
      InitializeComponent(); 
      f2 = f; 
      f2.Show(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      f2.enableB(); 
     } 
    } 

Надеется, что это помогает

2

Назовем ваши формы Форма A и Форма B.

Форма A содержит экземпляр Форма B? Он вызывает FormB.Show()?

Если это произойдет, вы можете создать событие в формы B и имеют форма А слушать его.

Если нет, то вы еще создать событие в формы B, но у вас есть все, что называется Форма B слушать его, а затем передать сообщение на Form A

Put это внутри формы B:

public delegate void ClickButton(); 
public event ClickButton ButtonWasClicked; 

Когда кнопка нажата, называют ButtonWasClicked();

private void button1_Click(object sender, EventArgs e) 
{ 
    ButtonWasClicked(); 
} 

Поместите это в форме А:

private FormB formB; 

public FormA() 
{ 
    InitializeComponent(); 
    formB = new FormB(); 
    formB.ButtonWasClicked += new FormB.ClickButton(formB_ButtonWasClicked); 
} 

void formB_ButtonWasClicked() 
{ 
    label1.Text = "Button was clicked: " + DateTime.Now.ToString(); 
} 

Источник:

http://darin.hoover.fm/code/dl/FormEvents.zip

0

Это пахнет как домашнее задание. Вам нужно, чтобы 2 формы знали друг о друге. Либо добавив экземпляр в одну форму, либо имея третий объект, управляющий обеими формами. Вы можете регистрироваться на событиях нажатия кнопки более одного раза. (т. е. вы можете иметь 5 форм, которые прослушивают нажатие кнопки 1 формы, и все 5 форм могут реагировать по-разному). Таким образом, вы можете щелкнуть кнопку мыши на своей собственной форме, а вторая форма также может зарегистрироваться на мероприятие и установить собственные кнопки, которые будут включены true/false по мере необходимости. Пример:

public class MyForm : Form 
{ 
    MyOtherForm OtherForm; 
    public MyForm() 
    { 
     InitializeComponent(); 
     OtherForm = new MyOtherForm(); 
     OtherForm.ButtonINeedToListenFor.Click += new EventHandler(ButtonINeedToListenFor_Click); 
    } 

    void ButtonINeedToListenFor_Click(object sender, EventArgs e) 
    { 
     this.MyDependingButton.Enabled = false; 
    } 
} 
Смежные вопросы