好的,我有我的主要表单(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}}对象。
答案 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
表单的方式,您可以使用允许您设置拥有表单的Show
或ShowDialog
方法将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;