从另一个表单更改表单文本

时间:2013-12-02 15:17:14

标签: c# winforms forms

我有2个Winforms(在Visual C#上)。在Form1上我有一个按钮,当用户点击它时,我想要在我打开Form2之前更改Form2的文本(显示在Winform左上角的文本中)。

我尝试了这些(1) (2),但它们无效。

在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打开,但文本不会更改。

4 个答案:

答案 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 = "Η πόλη του Πειραιά";
}