我有2个Winforms(在Visual C#上)。在Form1上我有一个按钮,当用户点击它时,我想要在我打开Form2之前更改Form2的文本(显示在Winform左上角的文本中)。
在Form2上我有
public string formtext
{
get {return this.Text;}
set {this.Text = value;}
}
这是我在Form1上的按钮
public void kryptonButton2_Click(object sender, EventArgs e)
{
// Form2
Form2 form2 = new Form2();
form2.Text = "Η πόλη του Πειραιά";
}
请注意,我单击该按钮更改文本,然后单击另一个按钮以打开Form2。
Form2打开,但文本不会更改。
答案 0 :(得分:1)
您的 Form2 实例必须可以通过文本更改例程进行访问。
private Form2 m_form2;
public Form1() {
InitializeComponent();
m_form2 = null;
}
现在您已经完成了基础工作,您需要使用m_form2
和不 Show()
来呼叫您的ShowDialog()
对象:
private void ShowForm2(string optionalText) {
if (m_form2 == null) {
m_form2 = new Form2();
m_form2.Show();
} else {
m_form2.Focus();
}
if (!String.IsNullOrEmpty(optionalText)) {
m_form2.Text = optionalText;
}
}
使用此设置,您的按钮应适用于 Form2 ,方法是修改您的例程:
public void kryptonButton2_Click(object sender, EventArgs e) {
ShowForm2(null);
m_form2.Text = "Η πόλη του Πειραιά";
}
或使用optionalText
参数:
public void kryptonButton2_Click(object sender, EventArgs e) {
ShowForm2("Η πόλη του Πειραιά");
}
您也可以使用委托来完成此操作。这是C#的一个非常强大的功能。如果您想查看代码示例,请在此处查看我对此问题的回答:
https://stackoverflow.com/a/19146929/153923
<强>更新强>
听起来你可能只需要Mike Cheel答案的更新版本。
尝试:
public void kryptonButton2_Click(object sender, EventArgs e) {
Form2 form2 = new Form2();
form2.formtext = "Η πόλη του Πειραιά";
form2.Show(); // Mike left this part out
}
答案 1 :(得分:0)
尝试:
public void kryptonButton2_Click(object sender, EventArgs e)
{
// Form2
Form2 form2 = new Form2();
form2.formtext = "Η πόλη του Πειραιά";
}
答案 2 :(得分:0)
您的方法不起作用有几个原因。
public void kryptonButton2_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(); //<-- this is a new instance for Form2
form2.Text = "Η πόλη του Πειραιά"; //<-- and this is not your propery
//(as pointed out by @MikeCheel)
}
如果您没有Form2
的实例,那么您可以尝试从Application.OpenForms
获取,但这是一个HACK。
var frm2 = Application.OpenForms.Cast<Form>()
.FirstOrDefault(c => c.Name == "Form2");
if(frm2 != null)
form2.formtext= "Η πόλη του Πειραιά";
答案 3 :(得分:0)
当您单击其他按钮打开表单时,您需要保留对它的引用,以便您的其他按钮单击事件可以使用它:
private Form2 child;
public void openOtherForm_Click(object sender, EventArgs e)
{
child = new Form2();
child.Show();
}
现在您可以使用该字段来操作它:
public void kryptonButton2_Click(object sender, EventArgs e)
{
form2.formtext = "Η πόλη του Πειραιά";
}