C#从form2中选择form1中的文本

时间:2013-10-22 01:44:29

标签: c#

好的,我有我的主要表单(Form1)和SearchReplace表单。我的SearchReplace表单包含一个文本框和一个按钮。当按下按钮时,它应该选择Form1中文本框中的任何内容,但什么都不做。谁能帮我?没有给我一个错误,只是没有做任何运行时。

SearchReplace

    public void button1_Click(object sender, EventArgs e)
    {
        Form1.searchT = textBox1.Text;


        Form1 form1 = new Form1();
        form1.searchText();
        this.Close();
    }

Form1 searchText

    public void searchText() // search function
    {

        if (searchT != null)
        {
            if (textBox1.TextLength > 0)
            {
                if (textBox1.Text.Contains(searchT))
                {
                    textBox1.SelectionStart = textBox1.Text.IndexOf(searchT);
                    textBox1.SelectionLength = searchT.Length;
                }
            }
        }
    }

searchT是在Form1中创建的公共字符串,因为当我询问将数据从一个表单传递到另一个表单时,有人告诉我直接通过Form1而不是{ {1}}对象。

6 个答案:

答案 0 :(得分:1)

根据您最近的评论,最好先隐藏您当前的表单(SearchReplace) 调用Form1。然后在Form1关闭后关闭它。检查下面的代码:

我们说这是您的SearchReplace表单:

public partial class SearchReplace : Form
{
    Form1 form1;

    public SearchReplace()
    {
        InitializeComponent();
    }

    void form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        this.Close(); // When form1 is closed then close also SearchReplace form
    }

    private void button1_Click(object sender, EventArgs e)
    {

        Form1.searchT = textBox1.Text; // assign textbox1 to searchT
        form1 = new Form1(); // instantiate first
        form1.FormClosed += new FormClosedEventHandler(form1_FormClosed); // When Form1 Close
        form1.searchText(); // Run searchText function
        form1.Show(); // Show Form1
        this.Hide(); // Make SearchReplace form invisible but still in memory
    }
}

您的Form1就像:

public partial class Form1 : Form
{
    public static string searchT; // Static searchT string as per your requirement

    public Form1()
    {
        InitializeComponent();
    }


   public void searchText() // search function
   {

    if (searchT != null)
    {
        if (textBox1.TextLength > 0)
        {
            if (textBox1.Text.Contains(searchT))
            {
                textBox1.SelectionStart = textBox1.Text.IndexOf(searchT);
                textBox1.SelectionLength = searchT.Length;
            }
        }
    }
  }    
}

答案 1 :(得分:0)

问题是你在按钮点击上创建了一个全新的Form。你应该能够用这个完成你想要的东西:

public void button1_Click(object sender, EventArgs e)
{
    Form1.searchT = textBox1.Text;
    searchText(); //Calls this instance's searchText() function
    this.Close();
}

您可能希望searchT为非静态,否则其值将适用于Form1的所有实例。

答案 2 :(得分:0)

您可以将对form1中的文本框的引用传递给表单searchreplace的构造函数。 然后使用此引用选择给定的文本。

答案 3 :(得分:0)

根据您创建SearchReplace表单的方式,您可以使用允许您设置拥有表单的ShowShowDialog方法将Form1指定为所有者,然后而不是依赖于在Form1中设置变量只需将参数传递给您的函数。这样的事情对你有用。

<强> Form1中

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    public void searchText(string searchT) // search function
    {

        if (searchT != null)
        {
            if (textBox1.TextLength > 0)
            {
                if (textBox1.Text.Contains(searchT))
                {
                    textBox1.Focus(); // put focus to the Textbox so we can see our selection
                    textBox1.SelectionStart = textBox1.Text.IndexOf(searchT);
                    textBox1.SelectionLength = searchT.Length;

                }
            }
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        SearchReplace sr = new SearchReplace(); // Creating your SearchReplace Form
        sr.Show(this);  // Pass the creating form in as the Owner
    }
}

SearchReplace表格

public partial class SearchReplace : Form
{
    public SearchReplace()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ((Form1)this.Owner).searchText(textBox1.Text); //Cast the Owner to Form1 and access the Function 
                                                       //passing in your search Parameter
        this.Close();
    }
}

答案 4 :(得分:0)

您的代码没有任何问题,只是您只声明将选择哪个文本,不要指望它会自动突出显示,我建议您更改backgroundcolor或所选文本以突出显示它。 试试我的例子。

您使用RichTextBox

SUGGEST Form1中的

假设您声明了

public static string searchT;

然后在你的Form1 将searchReplace表单显示为Dialog

        private void searchReplaceBtn_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2();
            if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                searchText();
            }
        }

然后在SearchReplace Form

        private void button1_Click(object sender, EventArgs e)
        {
            Form1.searchT = textBox1.Text;
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
        }

最后在你的searchtext Method

        private void searchText()
        {

            if (searchT != null)
            {
                if (textBox1.TextLength > 0)
                {
                    int index = 0;
                    //this will loop through the entire richTextBox
                    while (index < textBox1.Text.LastIndexOf(searchT))
                    {
                        //this will select the text that matches the searchT
                        textBox1.Find(searchT, index, textBox1.TextLength, RichTextBoxFinds.None);
                        //this will change the background color of each of the selected text
                        textBox1.SelectionBackColor = Color.Yellow;
                        //this will continue searching to the end of the text
                        index = textBox1.Text.IndexOf(searchT, index) + 1;
                    }
                }
            }
        }

注意:您无法在文本框中选择多个文字,这就是为什么更改与searchT匹配的每个文字的背景颜色将是最佳选择。

希望这会有所帮助:)

答案 5 :(得分:0)

您可以使用属性并提供该特定文本框的值来执行此操作。

在你的form1:

public static string Text
{
   get { return textbox1.Text; }
}

你可以通过

以其他形式获得它
form1.Text;