我知道這是一個非常普遍的問題,我的問題是我已經嘗試了幾種方法,沒有一個爲我工作。從另一種形式訪問按鈕屬性
我有兩種形式,我需要的是按下一個窗體上的按鈕,將我的第二個窗體上的按鈕的啓用屬性設置爲true。
正如我所說我已經嘗試了多種方法,目前還沒有工作。
我知道這是一個非常普遍的問題,我的問題是我已經嘗試了幾種方法,沒有一個爲我工作。從另一種形式訪問按鈕屬性
我有兩種形式,我需要的是按下一個窗體上的按鈕,將我的第二個窗體上的按鈕的啓用屬性設置爲true。
正如我所說我已經嘗試了多種方法,目前還沒有工作。
你可以在第二種形式PUBLIC上做一個按鈕(你可以在* cs文件中或VS的控件的「屬性」窗口中做到這一點),並將第二種形式的實例添加到第一種形式中。或者你可以用第二種形式聲明一些delegate,來改變按鈕屬性,並在第一個中調用它。 其實還有更多的變種,我剛纔提到2 :)
即時嘗試當前方法涉及兩個按鈕是公開的,然後在按鈕單擊代碼在我的第二個窗體上,我創建一個我的實例父類main btnenable = new Main();並做這個btnenable.btnaddlvl4.Enabled = true;但那沒有奏效。 – nexus490 2012-04-19 07:33:30
@ 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
Reniuz提供的答案令我感到困惑,我無法遵循它。那麼我會怎麼做,而不是使用新的? – nexus490 2012-04-19 07:45:09
你應該在你的第二種形式中創建一個公共方法來啓用按鈕,然後在第一種形式中添加對第二種形式的引用。然後,在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();
}
}
希望它可以幫助
讓我們打電話給您的表格表格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();
}
來源:
這氣味像功課。 你需要有兩個表格瞭解彼此。通過將實例添加到一個窗體,或者讓第三個對象控制這兩種窗體。您可以多次註冊按鈕點擊事件。 (也就是說,你可以有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;
}
}
你可以用事件來做到這一點。 [這裏是一個例子](http://stackoverflow.com/a/6382869/754438) – Reniuz 2012-04-19 07:27:37