2011-11-25 63 views
2

我在替換已找到的文本時遇到問題。在這裏,我的代碼嘗試到目前爲止替換,似乎無法得到它的工作。我知道我需要使用插入方法,但不確定放置在那裏。替換並替換所有C#窗體表格

這裏我到目前爲止的代碼:

RichTextBox frm1TB = ((Form1)this.Owner).txtDisplay; 

foundAt = frm1TB.Text.IndexOf(replacingRichText.Text); 

if (foundAt == -1) 
{ 
    MessageBox.Show("Not Found"); 
} 
else 
{ 
    frm1TB.Text = frm1TB.Text.Replace(searchText.Text, replacingRichText.Text); 
    frm1TB.Text.Insert(); 
    frm1TB.SelectionStart = foundAt; 
    frm1TB.SelectionLength = searchText.TextLength; 
} 

我得到在Form 1周的RichTextBox,然後在表格2 1form兩個文本框查找和FindNext中被稱爲SEARCHTEXT和2箱更換,更換一次調用replacingRIchText 。

回答

1

您可能需要以相反的順序替換這些字符串,因爲一旦您替換字符串,您的索引和長度將會不同。

此外,爲您的代碼,我想你需要改變它的東西是這樣的:

//frm1TB.Text = frm1TB.Text.Replace(searchText.Text, replacingRichText.Text); 
//frm1TB.Text.Insert(); 

frm1TB.SelectionStart = foundAt; 
frm1TB.SelectionLength = searchText.TextLength; 
frm1TB.SelectedText = replacingRichText.Text; 

下面是一個簡單的例子(重構如需要):

private void ReplaceText(string findText, string replaceText) { 
    int index = frm1TB.Text.Length - 1; 
    index = frm1TB.Text.LastIndexOf(findText, index); 
    while (index > -1) { 
    frm1TB.SelectionStart = index; 
    frm1TB.SelectionLength = findText.Length; 
    frm1TB.SelectedText = replaceText; 
    index = frm1TB.Text.LastIndexOf(findText, index); 
    } 
} 
+0

{ RichTextBox的frm1TB =((Form1)this.Owner).txtDisplay; foundAt = frm1TB.Text.IndexOf(searchText.Text); if(foundAt == -1) { MessageBox.Show(「Not Found」); } else { frm1TB.Text = frm1TB.Text.Replace(searchText.Text,replacedRichText.Text); frm1TB.SelectionStart = foundAt; frm1TB.SelectionLength = searchText.TextLength; } – Stefan

+0

@Stefan我不確定你要我怎麼處理這個評論。你可以解釋嗎? – LarsTech