【问题标题】:How to change text in a textbox on another form in Visual C#?如何在 Visual C# 中更改另一个窗体上的文本框中的文本?
【发布时间】:2009-11-27 04:47:52
【问题描述】:

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

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

 private void button2_Click(object sender, EventArgs e)
    {

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


    }

【问题讨论】:

    标签: c# visual-studio text textbox


    【解决方案1】:

    当您在按钮单击事件处理程序中创建新表单时,您会实例化一个新表单对象,然后调用它的 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 尽管可以将文本框上的修饰符更改为公共,但使用属性设置文本是一种更好的设计,这样不会破坏信息隐藏的 OOP 原则。 (在这种情况下,隐藏文本框控件不被对象外部修改)。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      试试这个.. :)

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

      【讨论】:

        【解决方案4】:

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

        对我有用的解决方案:

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

        2. 然后我使用此事件 (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();
                }
        
            }
        

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

        【讨论】:

          【解决方案5】:

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

          private System.Windows.Forms.TextBox textBox1;
          

          到:

          protected System.Windows.Forms.TextBox textBox1;
          

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

          【讨论】:

            【解决方案6】:

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

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

            Passing Textbox Text to another form in Visual C#

            【讨论】:

            • 就像您的其他答案一样:在大多数情况下,链接不是答案,尤其是指向视频的链接。
            【解决方案7】:
            private void button1_Click(object sender, EventArgs e)
            {    
                Form2 frm = new Form2();
                TextBox txt = (TextBox)frm.Controls.Find("p1c1val", true)[0];
                txt.Text = "foo";
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-04-12
              • 2023-03-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多