在两个窗体之间传递值

时间:2010-07-12 08:54:59

标签: c# winforms parameter-passing

案例就是这样,我有两种不同的形式来自同一个解决方案/项目。我需要做的是在表单A中提取标签的值并将其加载到表单B.尽可能地,我不会使用此代码,因为它只会冲突我的整个程序:

FormB myForm = new FromB(label.Text);
myForm.ShowDialog();

我现在正在尝试的是一个具有get属性的类,并为我想要传递的值设置。但是,每当我从FormB访问get方法时,它都会返回一个空值。

我希望有人可以帮助我。任何其他方法都非常感谢。 :)

    public class Miscellaneous
    {
       string my_id;

       public void SetID(string id)
       {
           my_id = id;
       }

       public string GetID()
       {
           return my_id;
       }
     }

5 个答案:

答案 0 :(得分:2)

你可以这样做:

子表格

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();

使用这种方法,您不必更改构造函数,也可以添加另一个构造函数。

它们为空的原因是属性是在构造函数之后设置的,你也可以像这样做一些逻辑给你的getter和setter添加一些逻辑,但是,我会考虑不影响属性上的UI! / p>

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

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

答案 1 :(得分:0)

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

可能有更简洁的方法可以做到这一点,但只想到一种简单的方法来回传递信息并存储两种表格所需的任何信息。

编辑:这是我从这里拉出的单身人士的一个例子:

http://www.yoda.arachsys.com/csharp/singleton.html

public sealed class Singleton
{
    static readonly Singleton instance=new Singleton();

    // Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit
    static Singleton()
    {
    }

    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            return instance;
        }
    }
}

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

Singleton.Instance.YourProperty

答案 2 :(得分:0)

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

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

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

顺便说一句。 FormB myForm = new FromB(label.Text);无效,因为您正在传递值,并且在创建FormB时该值为空。 FormB myForm = new FromB(label);会起作用。

答案 3 :(得分:0)

((Form2)Application.OpenForms["Form2"]).textBox1.Text = "My Message";

答案 4 :(得分:0)

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

Public property somevariable as sometype

并使用实例

以第一种形式访问它
Dim obj as New form2()
obj .somevariable ="value"