2013-06-02 2 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을()에 액세스 할 수있게되었습니다.

하지만 Find (child) 창을 닫을 때만 해당 텍스트가 검색됩니다.

그래서 부모 창에있는 내용의 창을 사용하여 텍스트를 검색하는 사용자가 자식 창을 열도록하고 싶습니다.

+0

왜 텍스트 보 x에서 ctor? 또는 쇼 대화 상자를 호출하기 전에 그것을 인스턴스화 한 후에 필드에 설정합니까? 아니면 내가 너를 오해 했니? –

+0

childwindow의 입력란에 의해 검색 결과가 parentwindow의 텍스트 상자에 반영되기를 원합니다. Windows 메모장처럼. 따라서 Constructor를 전달하는 것은 부모 윈도우의 현재 인스턴스에 대한 실시간 변경을 반영하지 않습니다. 그렇지 않습니까? 나는 부모의 자식 관계를 시도하고 있는데, 부모의 현재 인스턴스를 자식에게 전달하여 작동하는지 확인하게한다. – user2432715

+0

"하지만 Find (child) 창을 닫을 때만 텍스트가 검색됩니다." ** Show() ** 대신 ShowDialog()를 사용하십시오[email protected]가 지적했듯이 "부모"양식에 대한 참조가 필요하므로 작업 할 수 있습니다. –

답변

0

컨트롤을 읽거나 쓰려고 할 때 주 창에 내용 컨트롤 (텍스트 상자 또는 기타)을 배치하거나 다른 작업을 수행해야하는 경우 공용 메서드가 있어야합니다. 예를 들어 검색 기준을 매개 변수로 사용하는 기본 양식에서 공용 메소드를 사용할 수 있습니다.

찾기 양식에서 Application.OpenForms을 사용하여 기본 양식에 액세스 할 수 있습니다.

말은 예를 Form1 대한 기본 양식이며, 당신은 당신이

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

당신은 다음 기본 폼에 컨트롤에 액세스 할 수 있습니다 할 수있는 그것에게 당신의 발견 양식에

MyTextArea라는 공용 속성을 제공

mainForm.MyTextArea .... 
+0

안녕 제임스는 retailcoder 항목에 내 의견을 확인하시기 바랍니다. – user2432715

+0

부모 양식을 제어하는 ​​대신 텍스트를 선택하는 실제 방법에 대한 도움이 필요합니까? – James

+0

나는 당신의 기술을 사용하여 관계를 완성 시켰고, 결국에는 idle_mind가 결승점에 도달하게했습니다. – user2432715

0

정적으로 작업하는 것이 거의 불가능합니다. 찾기 결과 상자방법으로 표시하여 양식을 표시하고 결과를 상위 창으로 반환하는 방법을 고려해야합니다.

, 일부 공용 속성 (예를 들어 FindText 및/또는 ReplaceText가) 사용자의 입력 (들) (사용자가 "OK"버튼을 클릭 할 때 당신이 FindText = findTextBox.Text처럼 그들을 설정할 수 있습니다) 저장하는 "FindBox"대화주세요

: -이 같은 것을 볼 수 있었다

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

안녕 방법 u는 정말 좋은 언급했다. 그러나 Child form을 닫지 않고 정보를 전달하는 방법. 아래는 내가 고심하고있는 시나리오들입니다 : 1. 찾기 (하위) 양식에서 텍스트 찾기를 클릭하면 부모 윈도우에서 텍스트를 선택해야합니다. 2. 초점은 부모에게 돌아 가야합니다. 3. 사용자가 다시 동일한 것을 검색하려고하면 (1 & 2) 4. 사용자가 찾기 창을 닫고 포커스를 부모 창으로 되돌려 야합니다. 메모장처럼. – user2432715

+0

올바른 방법을 제시해 주셔서 감사합니다. – user2432715

관련 문제