2016-06-28 32 views
0

我有2個窗體。在窗體之間傳遞字符串,而不使用.Show()方法[不刷新窗體]

在Form有一個文本框稱爲TextBox1中和一個按鈕[和許多其他文本框以及]

在點擊該按鈕時,一個新的窗體,窗體2打開

形式2具有2列的datagridview的。

在點擊datagridview的細胞[存在於窗口2] 使用:

private void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) , 所選擇的行的第一列中的內容必須轉到TextBox1的在Form1,無需刷新或重新打開Form1中。

我該如何做,而不使用.show()方法,因爲它會刷新我的form1,並因此導致其他文本框中的所有用戶鍵入的信息丟失?

注意:從DataGridView字符串形式獲取由做:

dataGridView.SelectedRows[0].Cells[1].Value.ToString() 
+1

要麼將​​Form1的實例傳遞給Form2,以便能夠直接修改Form1的控件,或者在Form1訂閱並在事件引發時更新控件的Form2中創建事件。 –

+0

選擇該值後第二種形式應該關閉嗎?看來你正在創建一個查找表單來從列表中選擇一個值。 –

+0

@VisualVincent我是一個新的程序員,也是一個緩慢的程序員。我不明白你的意思...對不起.. –

回答

1

把該單元格的值在public property

public string gridcellValue 
{ 
    get; set; 
} 

在你dataGridView_CellMouseClick(事件處理程序設置屬性說

this.gridcellValue = dataGridView.SelectedRows[0].Cells[1].Value.ToString(); 

然後在Form1中,你使用它的Form2實例(因爲創建從Form1 Form2的實例)可以訪問

textbox1.Text = frm2.gridcellValue; 

另一種方法是使該文本框的公共屬性,並通過在Form1比如在Form2的構造函數並設置像

文本框在Form1

public TextBox Form1Text 
{ 
    get {return this.testbox1;} 
    set {this.testbox1 = value;} 
} 

Form2 frm2 = new Form2(this); 
frm2.Show(); 

在窗體2

public class Form2 : Form 
{ 
    Form _form1; 
public Form2(Form1 frm) 
{ 
    _form1 = frm; 
} 

//In event handler 

private void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
{ 
    //set the value 
    ((TextBox)_form1.Form1Text).Text = dataGridView.SelectedRows[0].Cells[1].Value.ToString(); 
} 
} 
+0

它們都不起作用。第一個不會將值傳遞給文本框。第二個是使用.show()方法,這是我不想開始 –

+0

而我沒有提到的目的,我沒有使用常規文本框,但從鮑勃布拉德利alphablend文本框。當我試用你的選項2時,'set {this.testbox1 = value;}'行顯示錯誤值,不能隱式地將類型Sys ... forms.textbox轉換爲Zbobb.AlphablendTextbox。爲什麼發生這種情況? –

+0

沒關係,我解決了:) –

0

我解決了它,我想我的回答能幫助有需要[好像我是]

基本上,在Form1中,爲您創造一個公共的靜態字符串,如

public static string mystring = "";

然後這會導致你到窗體2按鈕,執行以下操作:

private void button_Click(object sender, EventArgs e) {

 Form2 frm = new Form2(); 

     if (frm.ShowDialog() == DialogResult.OK) 
     { 
      this.txt_box.Text = Form1.mystring; 

     } 
    } 

`

在窗口2 ,:

`

private void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
     { 
      Form1.mystring = dataGridView.SelectedRows[0].Cells[1].Value.ToString(); 
      this.DialogResult = DialogResult.OK; 
      this.Close(); 


     } 

,就是這樣! 祝你好運