【问题标题】:Visual Studio c# : Trying to send a string to another formVisual Studio c#:尝试将字符串发送到另一个表单
【发布时间】:2017-06-06 13:04:51
【问题描述】:

我正在做一个学校项目。 这是第一种形式的代码,我试图从中发送一个字符串:

public void textBox1_TextChanged(object sender, EventArgs e)
    {
        string ime=input_Ime.Text;
        var frm1 = new Form1();
        frm1.imee = ime;
    }

“Registracija”是我的第一个表单的名称,Form1 是我的第二个表单的名称。所以我试图将“ime”发送到名为 Form1 的第二个表单。 在 Form1 中,我得到了以下代码:

 public string imee { get; set; }

加上一个按钮来测试我的字符串是否正常工作:

public void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(this.imee);
    }

它不起作用。 MessageBox 不显示任何内容。

【问题讨论】:

  • 你在哪里显示Form1
  • 您可能使用了不同的Form1 实例而不是同一个实例。
  • @David 我稍后会展示我的 Form1。
  • @AljažTajhman:“稍后”在哪里?在显示的代码中,您创建了一个Form1 的实例,设置了一个值,从不显示它,然后它立即超出范围,因为方法结束了。如果您要显示不同的实例,那就是您要设置值的实例。

标签: c# windows forms winforms visual-studio


【解决方案1】:

常见问题。您正在创建 Form1 的 NEW 实例,并且该实例接收字符串。屏幕上实际显示的 Form1 实例没有改变。

您可以通过查看 OpenForms 集合来解决问题,搜索 Form1 的一个实例,然后如果找到,将字符串传递给该实例。

public void textBox1_TextChanged(object sender, EventArgs e)
{
    string ime=input_Ime.Text;
    var frm1 = Application.OpenForms.OfType<Form1>().FirstOrDefault();
    if(frm1 != null)
        frm1.imee = ime;
}

【讨论】:

    【解决方案2】:

    我猜你是在有人填写ime 后打开第二个表单,所以在打开第二个表单时你需要这样做:

    public partial class Form1: Form
    {        
        string ime;
    
        public Form1(string ime) //with this you are requesting `ime` when creating this form
        {
            InitializeComponent();
    
            this.ime = ime; //with this.ime you are referring to variable of this form, and with ime you are referring to variable from function
        }
    }
    

    当您从Registracija 打开此表单时,您需要这样做

    Form1 f1 = new Form1 (ime);

    【讨论】:

    • 这不是 OP 的问题。这是一种不同的方式。
    【解决方案3】:

    在 Registracija,

       public void textBox1_TextChanged(object sender, EventArgs e)
            {
                string ime=input_Ime.Text;
                Form1 frm1 = new Form1(ime);
                frm1.show();
            }
    

    在 Form1 中,

    public Form2(string strTextBox)
    {
      InitializeComponent(); 
      Messagebox.Show(strTextBox);
    }
    

    【讨论】:

    • 纯代码答案没有帮助。除非您解释问题是什么,以及您的解决方案如何解决它,否则这对任何人都没有多大用处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2016-08-03
    相关资源
    最近更新 更多