2010-07-12 84 views
2

情況是這樣的,我有來自同一解決方案/項目的兩種不同形式。我需要做的是提取表單A中標籤的值並將其加載到表單B中。儘可能多地使用該代碼,因爲它只會與我的整個程序發生衝突:在兩個窗體窗體之間傳遞值

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

我現在正在嘗試的是一個具有get和property屬性的類,並設置爲我想要傳遞的值。但是,每當我從FormB訪問get方法時,它都會返回一個空值。

我希望有人能幫助我。任何其他方式來做到這一點非常感謝。 :)

public class Miscellaneous 
    { 
     string my_id; 

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

     public string GetID() 
     { 
      return my_id; 
     } 
    } 
+1

請告訴我們您的獲取和設置的一些代碼在第二種形式

Public property somevariable as sometype 

和訪問它在第一種形式聲明公共財產varible。 – Andreas 2010-07-12 08:57:57

回答

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

通過這種方法,您不必更改構造函數,也可以添加其他構造函數。

它們爲空的原因是屬性是在構造函數之後設置的,你也可以這樣做,爲你的getters和setter添加一些邏輯,但是我會考慮不影響UI上的屬性!

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

在這種情況下,當您設置屬性時,UI將自動更新。

+0

我嘗試使用你發佈的第一個,它完美的工作,雖然我還是有點困惑。非常感謝:)我正在嘗試你給的第二個。 – Smiley 2010-07-12 09:11:57

+0

它只是「重構」的代碼,this:'var child = new TestForm {YourText = someTextBox.Text};'與TestForm child = new TestForm()相同。 child.YourText = someTextBox.Text;'但第一個看起來更好。請記住,在實際設置任何屬性之前調用構造函數,使用調試器遍歷代碼並查看它的功能。 – 2010-07-12 09:15:54

+0

你可以做'set {someLabel.Text = value; ''直接。不需要像那樣包裹它。 – 2010-07-12 09:16:23

0

那麼一種方法是在您的應用程序中創建一個單例類。當您形成b加載或標籤更改時,使用該值更新單身人士。然後當形成一個需要的值時,它可以在你的應用程序中獲得單例的實例,並且它將具有該值。

有可能是更乾淨的方法來做到這一點,但只是想一個簡單的方法來回傳遞信息和存儲這兩種形式所需的任何信息。

編輯:這裏是一個單身,我從這裏拉的例子:

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; 
     } 
    } 
} 

現在你需要做的就是把這個類的命名空間中是兩種形式訪問然後你可以調用這個類的實例屬性,然後引用你的值。您可以爲其添加屬性以及任何想要共享的屬性。當你想找回這些價值,你會這樣稱呼它:

Singleton.Instance.YourProperty 
+0

你能告訴我如何創建單身課程嗎?我對C#的廣泛特性有點新鮮。謝謝。 :) – Smiley 2010-07-12 09:02:32

+0

如果你只是谷歌單身模式,你會得到一些例子。但是我會看看我能否找到一個真正快速添加到我的答案中。 – spinon 2010-07-12 09:05:43

+0

謝謝你。我試圖實現這一個,看看哪個更好。 :)謝謝 – Smiley 2010-07-12 09:29:49

0

您可以使用一個靜態變量/方法來保存/傳遞控件的值(當它被更改時)。

您可以使用表格參考控制參考直接獲取和傳遞值。

您可以使用自定義事件(通知訂閱的代碼)。

btw。 FormB myForm = new FromB(label.Text);沒有工作,因爲您正在傳遞值,並且在創建FormB時該值爲空。 FormB myForm = new FromB(label);會工作。

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

歡迎使用stackoverflow!提供示例代碼的簡短說明總是更好,以提高發布準確性:) – 2012-10-29 14:39:30

0

使用實例

Dim obj as New form2() 
obj .somevariable ="value" 
相關問題