2014-01-13 46 views
0

我要選擇這是寫在查找主窗體上的文字和替換形式我正在查找和替換功能記事本

private void findToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    Find f = new Find(); 

    f.Show(); 
} 

public void find() 
{ 
    int idx = 0; 

    while ((idx = textBox1.Text.IndexOf(Text)) != -1) 
    { 
     textBox1.Select(idx, Text.Length); 
    } 

} 

的形式2

Form1 f = new Form1(); 
f.Text = textBox1.Text; 
f.find(); 
+6

很難理解你在問什麼。請嘗試詳細說明 –

+0

你在做什麼,將form2上texbox1上的文本分配給form1的文本,然後運行一個函數來查找form1的textbox1中的文本,問題是該文本1來自form1,textbox1來自form2不一樣的是,不幸的是,你需要進一步的指導,以獲得Windows窗體的基礎知識,並且很可能是一般的編程。 – Rafael

+0

我只是試圖在記事本中創建查找和替換方法。 我設計了記事本,但我是機器人能夠做到這一功能找到並替換 –

回答

3

我不知道這是去工作,根據你提供了什麼:您可以通過該文本框,在Form1publicProperties窗口,然後做這樣的事情,而不是修復。

下面是一些可能幫助:

private void findToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    Find f = new Find(); 
    f.Parent = this; // find a way to pass the Parent to your Find form. 
    f.Show(); 
} 

public void find(string findValue) 
{ 
    int idx = 0; 

    if ((idx = textBox1.Text.IndexOf(findValue)) != -1) 
    { 
     textBox1.Select(idx, findValue.Length); 
    } 

} 

的形式2

Form1 f = (Form1)this.Parent; 
f.find(textBox1.Text); 

你不能實例化一個新的Form1上,否則你將永遠不會得到你的結果。

+0

+1用於重構'find'方法來注入搜索值。 –

1

您需要注入的Form1實例爲Form2建設的Form2

var f2 = new Form2(this); 
f2.Show(); 

現在,該實例存儲爲privateForm2

private Form1 _f1; 

.ctorForm2的:

public Form2(Form1 f1) 
{ 
    _f1 = f1; 
} 

注:留在原地的默認構造函數)。

然後當你想要做一個find

_f1.Text = textBox1.Text; 
_f1.find(); 

你現在在做的是建立另一個實例Form1

一個感興趣的項目是_f1.Text = ... - 我猜這實際上應該是Form1上的一個文本框。

_f1.textBox1.Text = textBox1.Text; 
+0

在最後一部分,從我所瞭解的問題,他想創建某種查找功能。也就是說,在form1中選擇他在form2中輸入的內容。我假設他在Find()方法中使用Form1中的公共Text屬性。儘管將它作爲參數傳遞給find方法可能會更好。 – Charlie

+0

@Charlie,以及'Text'屬性是可疑的,因爲它會覆蓋'Form'的標題 - 正如你可以在下面看到我爲jp2code的回答,因爲它重構了find方法所以我不一定不同意。 –

+0

你是對的,我忘了一個'Form'已經有一個'Text'屬性 – Charlie