如何在Visual C#中的另一个窗体上的文本框中更改文本?

在Visual C#中,当我单击一个按钮时,我想加载另一个表单。 但在该表单加载之前,我想用一些文本填充文本框。 在显示表单之前,我尝试使用一些命令来执行此操作,但是由于其保护级别,我收到错误,指出文本框无法访问。

如何在显示之前在表单中设置文本框?

private void button2_Click(object sender, EventArgs e) { fixgame changeCards = new fixgame(); changeCards.p1c1val.text = "3"; changeCards.Show(); } 

在按钮单击事件处理程序中创建新表单时,您实例化一个新的表单对象,然后调用其show方法。

获得表单对象后,还可以调用该类中存在的任何其他方法或属性,包括设置文本框值的属性。

因此,下面的代码为Form2类添加了一个属性,用于设置文本框(其中textbox1是文本框的名称)。 我更喜欢这种方法方法而不是通过修改其访问修饰符使TextBox本身可见,因为它为您提供了更好的封装,确保您可以控制文本框的使用方式。

 public partial class Form2 : Form { public Form2() { InitializeComponent(); } public string TextBoxValue { get { return textBox1.Text;} set { textBox1.Text = value;} } } 

在第一个表单的按钮单击事件中,您可以使用以下代码:

 private void button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.TextBoxValue = "SomeValue"; form2.Show(); } 

您可以将TextBox控件的“Modifiers”属性设置为“Public”

试试这个.. :)

 Form1 f1 = (Form1)Application.OpenForms["Form1"]; TextBox tb = (TextBox)f1.Controls["TextBox1"]; tb.Text = "Value"; 

我知道这是很久以前的事了,但似乎是一个非常受欢迎的主题,有许多重复的问题。 现在我有一个类似的情况,我有一个类,从其他类调用具有许多单独的线程,我不得不从所有这些其他线程更新一个特定的表单。 因此创建一个委托事件处理程序就是答案。

对我有用的解决方案:

  1. 我在类中创建了一个事件,我希望在另一个表单上进行更新。 (当然,我首先在类中实例化了表单(称为SubAsstToolTipWindow )。)

  2. 然后我使用此事件( ToolTipShow )在我想要更新标签的表单上创建一个事件处理程序。 工作就像一个魅力。

我使用此描述在执行更新的类中设计我自己的代码:

 public static class SubAsstToolTip { private static SubAsstToolTipWindow ttip = new SubAsstToolTipWindow(); public delegate void ToolTipShowEventHandler(); public static event ToolTipShowEventHandler ToolTipShow; public static void Show() { // This is a static boolean that I set here but is accessible from the form. Vars.MyToolTipIsOn = true; if (ToolTipShow != null) { ToolTipShow(); } } public static void Hide() { // This is a static boolean that I set here but is accessible from the form. Vars.MyToolTipIsOn = false; if (ToolTipShow != null) { ToolTipShow(); } } } 

然后我的表单的代码已更新

 public partial class SubAsstToolTipWindow : Form { public SubAsstToolTipWindow() { InitializeComponent(); // Right after initializing create the event handler that // traps the event in the class SubAsstToolTip.ToolTipShow += SubAsstToolTip_ToolTipShow; } private void SubAsstToolTip_ToolTipShow() { if (Vars.MyToolTipIsOn) // This boolean is a static one that I set in the other class. { // Call other private method on the form or do whatever ShowToolTip(Vars.MyToolTipText, Vars.MyToolTipX, Vars.MyToolTipY); } else { HideToolTip(); } } 

我希望这有助于你们中许多人仍然遇到同样的情况。

在设计器代码隐藏文件中,只需更改默认情况下文本框的声明:

 private System.Windows.Forms.TextBox textBox1; 

至:

 protected System.Windows.Forms.TextBox textBox1; 

protected关键字是成员访问修饰符。 受保护的成员可以从声明它的类中访问,也可以从声明该成员的类派生的任何类中访问(有关详细信息,请参阅此链接 )。

我也有同样的疑问,所以我在互联网上搜索并找到了一种在C#之间传递变量值的好方法,这很简单。 它没什么,但是要在第一个Form中分配一个变量,你可以从任何forms访问该变量。 我创建了一个关于“如何将值传递给表单”的video教程

转到以下链接以查看video教程。

在Visual C#中将文本框文本传递给另一个表单

 private void button1_Click(object sender, EventArgs e) { Form2 frm = new Form2(); TextBox txt = (TextBox)frm.Controls.Find("p1c1val", true)[0]; txt.Text = "foo"; }