在Visual C#中单击按钮时,我想加载另一个表单。但在该表单加载之前,我想用一些文本填充文本框。在显示表单之前,我尝试使用一些命令来执行此操作,但是我收到一条错误,指出文本框由于其保护级别而无法访问。
如何在显示之前在表单中设置文本框?
private void button2_Click(object sender, EventArgs e)
{
fixgame changeCards = new fixgame();
changeCards.p1c1val.text = "3";
changeCards.Show();
}
答案 0 :(得分:19)
在按钮单击事件处理程序中创建新表单时,实例化一个新表单对象,然后调用其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();
}
答案 1 :(得分:3)
您可以将TextBox控件的“Modifiers”属性设置为“Public”
答案 2 :(得分:1)
我知道这是很久以前的事了,但似乎是一个非常受欢迎的主题,有很多重复的问题。现在我有一个类似的情况,我有一个类,从其他类调用具有许多单独的线程,我不得不从所有其他线程更新一个特定的表单。因此,创建一个委托事件处理程序就是答案。
对我有用的解决方案:
我在类中创建了一个事件,我想在另一个表单上进行更新。 (当然,我首先在类中实例化了表单(称为SubAsstToolTipWindow
)。)
然后我使用此事件(ToolTipShow
)在我想要更新标签的表单上创建一个事件处理程序。像魅力一样工作。
我使用this description在执行更新的类中设计我自己的代码:
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();
}
}
我希望这有助于你们中的许多人仍然遇到同样的情况。
答案 3 :(得分:1)
试试这个.. :))
Form1 f1 = (Form1)Application.OpenForms["Form1"];
TextBox tb = (TextBox)f1.Controls["TextBox1"];
tb.Text = "Value";
答案 4 :(得分:0)
在设计器代码隐藏文件中,只需更改默认情况下文本框的声明:
private System.Windows.Forms.TextBox textBox1;
为:
protected System.Windows.Forms.TextBox textBox1;
protected关键字是成员访问修饰符。受保护的成员可以在声明它的类中访问,也可以从声明该成员的类派生的任何类中访问(有关详细信息,请参阅此link)。
答案 5 :(得分:0)
我也有同样的疑问,所以我在互联网上搜索并找到了一种在C#中表单之间传递变量值的好方法,这很简单。它没什么,但是在第一个Form中分配一个变量,你可以从任何形式访问该变量。我已经创建了一个关于“如何将值传递给表单”的视频教程
请转到以下链接查看视频教程。
答案 6 :(得分:0)
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
TextBox txt = (TextBox)frm.Controls.Find("p1c1val", true)[0];
txt.Text = "foo";
}