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

时间:2009-11-27 04:47:53

标签: c# visual-studio text textbox

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

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

 private void button2_Click(object sender, EventArgs e)
    {

        fixgame changeCards = new fixgame();
        changeCards.p1c1val.text = "3";
        changeCards.Show();


    }

7 个答案:

答案 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)

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

对我有用的解决方案:

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

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

  3. 我使用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中分配一个变量,你可以从任何形式访问该变量。我已经创建了一个关于“如何将值传递给表单”的视频教程

请转到以下链接查看视频教程。

Passing Textbox Text to another form in Visual C#

答案 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";
}