C# 从窗体 2 中选择窗体 1 中的文本
本文关键字:窗体 文本 选择 | 更新日期: 2023-09-27 18:36:16
好的,所以我有我的主形式(Form1
)和SearchReplace
形式。我的SearchReplace
窗体包含一个文本框和一个按钮。当按下按钮时,它应该选择文本框中的任何内容 Form1
,但什么也不做。谁能帮我?没有给我一个错误,只是没有做任何运行时。
搜索替换
public void button1_Click(object sender, EventArgs e)
{
Form1.searchT = textBox1.Text;
Form1 form1 = new Form1();
form1.searchText();
this.Close();
}
表单 1 搜索文本
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
对象更容易。
根据您最近的评论,最好在之前隐藏您当前的表单(SearchReplace)调用表单 1。然后在 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;
}
}
}
}
}
问题是您在单击按钮时创建了一个全新的Form
。你应该能够完成你想要的:
public void button1_Click(object sender, EventArgs e)
{
Form1.searchT = textBox1.Text;
searchText(); //Calls this instance's searchText() function
this.Close();
}
您可能希望searchT
设为非静态,否则其值将应用于 Form1
的所有实例。
您可以将对 form1 中文本框的引用传递给表单搜索替换的构造函数。然后使用此引用选择给定的文本。
根据您创建SearchReplace
窗体的方式,您可以使用允许您设置拥有窗体的Show
或ShowDialog
方法将Form1
指定为所有者,然后不依赖于在 Form1 中设置变量,只需将参数传递给您的函数即可。这样的东西应该适合你。
表格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();
}
}
你的代码没有错,只是你只声明了要选择哪个文本,不要指望它会自动突出显示,我建议你改变背景颜色或选定的文本来突出显示它。试试我的例子。
我建议你使用RichTextBox
在您的 Form1 中假设您声明
了一个public static string searchT;
然后在你的Form1
将搜索替换表单显示为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
匹配的每个文本的背景颜色将是最佳选择。
希望这对:)有所帮助
使用属性并给出该特定文本框的值来执行此操作。
在您的表单中1:
public static string Text
{
get { return textbox1.Text; }
}
你可以通过你的其他形式得到它
form1.Text;