2012-04-19 32 views
0

我知道這是一個非常普遍的問題,我的問題是我已經嘗試了幾種方法,沒有一個爲我工作。從另一種形式訪問按鈕屬性

我有兩種形式,我需要的是按下一個窗體上的按鈕,將我的第二個窗體上的按鈕的啓用屬性設置爲true。

正如我所說我已經嘗試了多種方法,目前還沒有工作。

+1

你可以用事件來做到這一點。 [這裏是一個例子](http://stackoverflow.com/a/6382869/754438) – Reniuz 2012-04-19 07:27:37

回答

1

你可以在第二種形式PUBLIC上做一個按鈕(你可以在* cs文件中或VS的控件的「屬性」窗口中做到這一點),並將第二種形式的實例添加到第一種形式中。或者你可以用第二種形式聲明一些delegate,來改變按鈕屬性,並在第一個中調用它。 其實還有更多的變種,我剛纔提到2 :)

+0

即時嘗試當前方法涉及兩個按鈕是公開的,然後在按鈕單擊代碼在我的第二個窗體上,我創建一個我的實例父類main btnenable = new Main();並做這個btnenable.btnaddlvl4.Enabled = true;但那沒有奏效。 – nexus490 2012-04-19 07:33:30

+1

@ nexus490,stop..by writing'Main btnenable = new Main();'你不會得到現有表單的INSTANCE ..你可以創建一個新表單(請參閱「new」關鍵字http://msdn.microsoft.com/ EN-US /庫/ 51y09td4(v = vs.71)的.aspx)。如果你想這樣做 - 你可能應該將屬性添加到父類型的子表單中,比如'Main Parent {get; set;}',並且在實例化子表單時將其設置爲父表單:'Child child = new Child(); child.Parent = this;'。有點混亂,但希望這會幫助你使你的代碼工作。 @Reniuz提供了更好的解決方案,事件見他的評論。 – 0x49D1 2012-04-19 07:43:04

+0

Reniuz提供的答案令我感到困惑,我無法遵循它。那麼我會怎麼做,而不是使用新的? – nexus490 2012-04-19 07:45:09

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事件,並有A型聽它。

如果沒有,你還創建表格B的事件,但你有什麼所謂表格B聽它,然後將消息傳遞給A型

將這個內部形式B的:

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

當點擊該按鈕時,調用ButtonWasClicked();

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

A型將這個:

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

這氣味像功課。 你需要有兩個表格瞭解彼此。通過將實例添加到一個窗體,或者讓第三個對象控制這兩種窗體。您可以多次註冊按鈕點擊事件。 (也就是說,你可以有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; 
    } 
}