在 Windows 表单中将文本框值从一种形式传递到另一种形式

Passing Textbox Values one form to another form in Windows Forms

我正在尝试从用户那里获取用于绘制圆(为此我使用半径输入)和矩形(Edge1 和 Edge2)输入的输入值。我想将这些文本框值传递到另一个表单上以绘制它们。 如何将这些值移动到属性部分或任何解决方案想法中的另一种形式?

顺便说一句,表格在同一个项目中。

我定义了一个接口并实现了有关计算的过程。我的代码在下面并且有效,谢谢你的回复。

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Assignment2
{
    class CircleShape : Shape, IShape
    {
        public int radius;
        public CircleShape(int radius)
        {
            this.radius = radius;


        }
        public double CalculateArea()
        {
            return Math.PI * radius * radius;
        }

        public double CalculatePerimeter()
        {
            return 2 * Math.PI * radius;
        }
    }
}

一种方法是在您的第二个表单上使用一个方法,returns 任何需要的详细信息

using (DrawForm drawForm = new DrawForm ())
{
    drawForm.ShowDialog(); //will wait for the form to close before continuing
    var userResults = drawForm.GetResults(); //returns whatever you need the form to return
    return userResults;
}

上述逻辑仅在第二种形式是某种弹出形式时才有效。如果你希望两种形式都持久化,那就有点不同了。您可能希望确保两种形式都可以相互访问。当您创建 drawform 时,一定要保存对它的引用。并在 drawform 的构造函数中添加一个参数以包含主窗体。

  DrawForm drawForm = new DrawForm(this);//now the forms can talk to each other

当用户点击 'go'

时在您的绘图表单中
 mainForm.TriggerFinishedDrawing(drawingObject);

有多种方法可以实现这种行为,您只需要确定哪种流程在您的用例中最有意义

将数据从一个表单传递到另一个表单的一种简单方法是,您可以使用 Application.OpenForms Property.

首先定义一个TextBox property来访问Form1中的TextBox实例

// Form1.cs
public TextBox TB
{
    get { return textBox1; }
    set { textBox1 = value; }
}

然后调用Application.OpenForms获取Form1实例。

// Form2.cs
Form1 fr = (Form1)Application.OpenForms["Form1"];
if (fr != null)
{
    Form1 f1 = (Form1)fr;
    // get text form Form1.textbox1
    MessageBox.Show(f1.TB.Text);
}

如果通过点击Form1中的按钮打开Form2,并在Form2显示时传值,可以通过constructor实现。

// Form1.cs
private void btnOpenForm2_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2(textBox1.Text);
    f2.Show();
}

// From2.cs
string textformForm1;
public Form2(string str)
{
    InitializeComponent();
    textformForm1 = str;
}

private void btnShowText_Click(object sender, EventArgs e)
{
    MessageBox.Show(textformForm1);
}

同样,你也可以使用public属性。

// Form1.cs
private void btnOpenForm2_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2();
    f2.TextformForm1 = textBox1.Text;
    f2.Show();
}

// Form2.cs
public string TextformForm1 { get; set; }

private void btnShowText_Click(object sender, EventArgs e)
{
    MessageBox.Show(TextformForm1);
}