2011-08-17 112 views
0

基本上我想要做的是我有一個字符串在主窗體上從文本框中拉出它的值。如何將字符串傳遞給子窗體?

然後,我生成第二個窗體的模態版本,並希望在進程的第二個窗體中使用該字符串(或主窗體textbox1.text值)。

主要形式

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Diagnostics; 
using System.IO; 




namespace Tool{ 

    public partial class MainForm : Form 
    { 
     public string hostname; 
     public MainForm() 
     { 
      InitializeComponent(); 
      textBox1.Text = hostname; 

     } 
    public void btn_test_Click(object sender, EventArgs e) 
     { 
      string hostname = textBox1.Text; 
      SiteForm frmsite = new SiteForm(); 
      frmsite.ShowDialog(); 


     } 

    } 
} 

' 子窗體

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Diagnostics; 
using System.IO; 

namespace Tool 
{ 
    public partial class SiteForm : Form 
    { 
     public string hostname {get; set; } 
     public SiteForm() 
     { 
      InitializeComponent(); 
     } 

     private void label1_Click(object sender, EventArgs e) 
     { 
      label1.Text = this.hostname; 
     } 


    } 
} 

我如何能做到這一點有什麼建議?我知道必須有一個更簡單的方法,對不起,我還是一個小菜鳥,我正在努力自學C#。

結果是當我點擊子窗體上的標籤時它是空白的,因爲這個我能夠推斷出字符串沒有正確地在兩個窗體之間傳遞。

+0

實際上,我沒有看到字符串在窗體之間傳遞的位置。我錯過了什麼嗎? –

回答

2

最簡單的方法是將其傳遞子窗體的構造函數,例如:

private string _hostname = ""; 

... 

public SiteForm(string hostname) 
{ 
    _hostname = hostname; 
    InitializeComponent(); 
} 
+1

不應該在''InitalizeComponent();' – Bosak

+0

@Bosak之後執行'_hostname = hostname;'**不需要。如果代碼不與控件交互,則任何位置都可以。如果代碼與控件進行交互,則需要在InitializeComponent調用之後放置代碼。 – 2011-08-17 13:33:38

+0

你是來自Facepunch或其他人的Grea $ eMonkey嗎?對不起,offtopic – Bosak

1

嘗試掛鉤到您的子窗體的Load事件並設置其hostname屬性的值在事件處理上你的主要形式。

public void btn_test_Click(object sender, EventArgs e) 
    { 
     string hostname = textBox1.Text; 
     SiteForm frmsite = new SiteForm(); 
     frmsite.Load += new EventHandler(frmsite_Load); 
     frmsite.ShowDialog(); 
    } 

public void frmsite_Load(object sender, EventArgs e) 
{ 
     SiteForm frmsite = sender as SiteForm; 
     frmsite.hostname = this.hostname; 

}