1

こんにちは、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() にアクセスできます。

しかし、検索(子)ウィンドウを閉じたときにのみ、テキストが検索されます。

そのため、親ウィンドウのコンテンツに対してそのウィンドウを使用してテキストを検索するユーザーで子ウィンドウを開きたいと思います。

4

2 に答える 2

0

メイン ウィンドウのコンテンツ コントロール (Textbox など) をパブリック プロパティでラップする場合は、コントロールの読み取りまたは書き込みを行うか、他の操作が必要な場合はパブリック メソッドを使用します。たとえば、検索条件をパラメーターとして受け取るメイン フォームにパブリック メソッドを設定できます。

Application.OpenForms検索フォームからメインフォームにアクセスできます。

たとえばForm1、 がメイン フォームであり、それにパブリック プロパティを指定するとします。MyTextArea

検索フォームでこれを行うことができます

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

次に、メインフォームのコントロールにアクセスできます

mainForm.MyTextArea ....
于 2013-06-02T19:46:09.733 に答える
0

物事を静的にすることが正しい方法であるということはめったにありません。フォームを表示して結果を親ウィンドウに返すメソッドとして、検索ボックスの結果を取得することを考える必要があります。

"FindBox" ダイアログにいくつかのパブリック プロパティ ( FindTextand/orReplaceTextなど) を与えて、ユーザーの入力を保存します (ユーザーが "Ok" ボタンをクリックしたときに設定できます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"
}
于 2013-06-02T19:54:28.167 に答える