2013-06-02 49 views
0

嗨我想創建一個類似於Windows記事本的記事本。 我陷入了一種情況,我想查找在查找框中搜索到的文本(就像我們在記事本中一樣),並在包含所有文本的文本框的父窗口中顯示選定的文本。如何使用子窗口在父窗口中搜索文本框內容?

我試着讓方法是靜態的,以訪問父窗口中的搜索文本。 下面的代碼爲:

namespace NotePadApp 
{ 
public partial class Find : Form 
{ 

    static string SearchText=""; 
    static Find Findbox; 

static Find Findbox; 


    public static string GetSearchText() 
    { 
     Findbox = new Find(); 
     Findbox.ShowDialog(); 
     return SearchText; 

    } 

    }} 

我能夠訪問靜態方法GetSearchText()。

但只有當我關閉查找(兒童)窗口文本搜索。

所以我想打開子窗口,用戶使用該窗口爲父窗口中的內容搜索文本。

+0

爲什麼不給這種形式的textbo x在ctor?或者在調用顯示對話框之前將其設置爲一個字段?或者我誤解了你? –

+0

我想通過childwindow中的文本框將搜索反映到父窗口中的文本框中。就像窗戶記事本一樣。所以傳遞構造函數不會反映父窗口當前實例的實時更改,我想或者我錯了?我正在嘗試父母的孩子關係,讓我看看如果通過將父母的當前實例傳遞給孩子來工作。 – user2432715

+0

「但是隻有當我關閉查找文本的查找(子)窗口。」然後使用** Show()**代替ShowDialog()。正如@James指出的那樣,您還需要參考「父」表單,以便您可以使用它。 –

回答

0

如果您正試圖讀取或寫入控件,或者在需要執行其他操作時使用公共方法,請在公用屬性中包含主窗口中的內容控件(文本框或其他)。例如,您可以在主窗體上使用搜索條件作爲參數的公共方法。

您可以使用查找表中的Application.OpenForms來訪問主窗體。

比方說Form1是你的主要形式,你給它叫MyTextArea

在您的發現形式的公共屬性,你可以做到這一點

var mainForm = (Form1)Application.OpenForms["Form1"]; 

然後,您可以訪問你的主窗體上的控件與

mainForm.MyTextArea .... 
+0

嗨詹姆斯請檢查我的零售商入口評論。 – user2432715

+0

您是否需要有關選擇文本的實際方法而不是控制父窗體的幫助? – James

+0

我用你的技術來完成關係,最後idle_mind讓我到達終點線。 – user2432715

0

使事情靜態很少是正確的方式去做事情。您需要考慮將搜索框結果設置爲方法,該方法顯示錶單並將結果返回給父窗口。

帶來的「FindBox」對話框一些公共屬性(FindText和/或ReplaceText,例如)來存儲用戶的輸入(S)(當用戶點擊「確定」按鈕,您可以設置它們,就像FindText = findTextBox.Text)並編寫父窗體可以訪問的方法:

DialogResult FindTextInEditor(out string findText) 
{ 
    // instantiate the FindForm and display it with .ShowDialog() 
    var findForm = new FindBox(); 
    var result = findForm.ShowDialog(); 

    // set the out parameter using the public properties of the FindBox: 
    findText = findForm.FindText; 

    // if the user cancelled out the caller needs to know: 
    return result; 
} 

父/主要形式只需要調用此方法來顯示「查找框」,並獲得滿意的結果回來 - 可能是這個樣子:

string findText; 
var result = FindTextInEditor(out findText); 

if (result != DialogResult.Cancel) 
{ 
    // search the text editor content for "findText" 
} 
+0

嗨你提到的方法是非常好的。但如何通過關閉Child表單來傳遞信息。以下是我正在努力的情景:1。當用戶單擊Find(child)表單中的查找文本時,應該在父窗口中選擇文本。 2.重點應該回到父母身上。 3.如果用戶再次嘗試搜索相同的東西應該發生(1和2)4.用戶可以關閉查找窗口,焦點應該返回到父窗口。就像記事本一樣。 – user2432715

+0

感謝您展示正確的方式來做到這一點。 – user2432715

相關問題