0

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

搜索替换

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


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

Form1 搜索文本

    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而不是使用form1对象更容易做到这一点。

4

6 回答 6

1

根据您最近的评论,最好在调用 Form1 之前隐藏您当前的表单 (SearchReplace)。然后在 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;
            }
        }
    }
  }    
}
于 2013-10-22T02:01:35.640 回答
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.

于 2013-10-22T01:51:53.150 回答
0

你的代码没有问题,只是你只声明了会选择哪些文本,不要指望它会自动突出显示,我建议你更改背景颜色或选择的文本以突出显示它。试试我的例子。

建议你使用RichTextBox

在您的 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将是最佳选择的原因。

希望这可以帮助 :)

于 2013-10-22T03:20:56.427 回答
0

您可以通过使用属性并给出该特定文本框的值来执行此操作。

在您的表格1中:

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

您可以通过其他形式获得它

form1.Text;
于 2013-10-22T03:48:39.670 回答
0

根据您创建表单的方式,您可以使用允许您设置拥有表单的或方法将其SearchReplace分配Form1为所有者,而不是依赖于在 Form1 中设置变量,只需将参数传递给您的函数。像这样的东西应该适合你。ShowShowDialog

表格1

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
    }
}

搜索替换表格

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();
    }
}
于 2013-10-22T02:58:51.183 回答
0

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

于 2013-10-22T02:38:37.680 回答