C# 在两个windows窗体之间传递值

C# 在两个windows窗体之间传递值,c#,winforms,parameter-passing,C#,Winforms,Parameter Passing,在这种情况下,我从同一个解决方案/项目中有两种不同的形式。我需要做的是提取表格a中标签的值并将其加载到表格B中。我尽可能避免使用此代码,因为它只会与我的整个程序冲突: FormB myForm = new FromB(label.Text); myForm.ShowDialog(); 我现在尝试的是一个类,它的属性为get,并为我想要传递的值设置。但是,每当我从FormB访问get方法时,它都会返回一个空值 我希望有人能帮我。如有其他方法,我们将不胜感激。:) 一种方法是在应用程序中创建一个单

在这种情况下,我从同一个解决方案/项目中有两种不同的形式。我需要做的是提取表格a中标签的值并将其加载到表格B中。我尽可能避免使用此代码,因为它只会与我的整个程序冲突:

FormB myForm = new FromB(label.Text);
myForm.ShowDialog();
我现在尝试的是一个类,它的属性为get,并为我想要传递的值设置。但是,每当我从FormB访问get方法时,它都会返回一个空值

我希望有人能帮我。如有其他方法,我们将不胜感激。:)


一种方法是在应用程序中创建一个单例类。当表单b加载或标签更改时,使用该值更新单例。然后,当表单a需要该值时,它可以只获取应用程序中的单例实例,并且它将具有该值

可能有更干净的方法可以做到这一点,但只需要考虑一种简单的方法来来回传递信息,并存储两种表单所需的任何信息

编辑:下面是我从这里提取的一个单件示例:

现在,您需要做的就是将该类放在两种表单都可以访问的命名空间中,然后可以调用该类的实例属性,然后引用您的值。您还可以为想要共享的内容添加属性。当您想要检索这些值时,您可以这样调用它:

Singleton.Instance.YourProperty

你可以这样做:

Singleton.Instance.YourProperty
子表单

public string YourText { get; set; }

public TestForm()
{
    InitializeComponent();
}

public void UpdateValues()
{
    someLabel.Text = YourText;
}
启动它

var child = new TestForm {YourText = someTextBox.Text};

child.UpdateValues();

child.ShowDialog();
使用这种方法,您不必更改构造函数,还可以添加另一个构造函数

空的原因是属性是在构造函数之后设置的,你也可以这样做来给你的吸收器和设置器增加一点逻辑,但是,我会考虑不影响属性上的UI。p>

private string _yourText = string.Empty;
public string YourText
{
    get
    {
        return _yourText;
    }
    set 
    { 
        _yourText = value;
        UpdateValues(); 
    }
}

在这种情况下,当您设置属性时,UI将自动更新。

您可以使用静态变量/方法来保存/传递控件的值(当控件发生更改时)

您可以使用表单引用控制引用直接获取和传递值

您可以使用自定义事件(通知订阅的代码)

顺便说一句,FormB myForm=newfromb(label.Text)不起作用,因为您正在传递值,而在创建
FormB
时该值为空。
FormB myForm=new FromB(标签)会起作用。

以第二种形式声明公共属性变量

((Form2)Application.OpenForms["Form2"]).textBox1.Text = "My Message";
Public property somevariable as sometype
并使用实例以第一种形式访问它

Dim obj as New form2()
obj .somevariable ="value"

请给我们看一些获取和设置的代码。你能告诉我如何创建singleton类吗?我对C#的广泛功能有点陌生。谢谢。:)如果你只是谷歌单件模式,你会得到一些例子。但我会看看我是否能找到一个真正的快速添加到我的答案。谢谢。我正在尝试实施这一方案,看看哪一个更好。:)谢谢,我试着用了你发布的第一个,效果很好,尽管我还是有点困惑。非常感谢:)我正在尝试你提供的第二个。它只是“重构”代码,如下:
var child=newtestform{YourText=someTextBox.Text}
testformchild=newtestform()相同;child.YourText=someTextBox.Text但是第一个看起来更好。请记住,在实际设置任何属性之前会调用构造函数,请使用调试器逐步检查代码并查看其功能。您可以直接执行
set{someLabel.Text=value;}
。不需要这样包装。第二个错误告诉我:错误1当前上下文中不存在名称“UpdateValues”。好的,现在我正在实际提取它。谢谢你的帮助。我真的很感激。欢迎来到stackoverflow!最好为示例代码提供一个简短的描述,以提高post的准确性:)
Dim obj as New form2()
obj .somevariable ="value"