查找窗体怎么让匹配到的内容在父窗体中的richTextBox中选中?
希望各位路过的大侠支招,谢谢!
14 个解决方案
#1
在父窗体中创建一个自身的公共静态变量
class MainForm
{
public static MainForm mainForm=null;
MainForm()
{
mainForm=this;
}
}
class childForm
{
pbulci void SelectText()
{
MainForm.mainForm.richTextBox.SelectedStart=100;
}
}
class MainForm
{
public static MainForm mainForm=null;
MainForm()
{
mainForm=this;
}
}
class childForm
{
pbulci void SelectText()
{
MainForm.mainForm.richTextBox.SelectedStart=100;
}
}
#2
winform间传值
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show(this);
}
}
public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form1 frm1 = (Form1)this.Owner;
((TextBox)frm1.Controls["textBox1"]).Text = this.textBox2.Text;
this.Close();
}
}
还可使用委托
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show(this);
}
}
public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form1 frm1 = (Form1)this.Owner;
((TextBox)frm1.Controls["textBox1"]).Text = this.textBox2.Text;
this.Close();
}
}
还可使用委托
#3
正解
#4
通过委托实现复杂的窗体通信,比如可以传递复杂的数据类型,同时,可以在设计结构更加良好的中间通信类
public partial class MainFrm: Form
{
private void MainFrm _Load(object sender, EventArgs e)
{
Middle.sendEvent += new Middle.SendMessage(this.DoMethod);
}
public void DoMethod(string getstr)
{
listBox1.Items.Add(getstr);
}
}
ChildFrm.cs:
public partial class ChildFrm: Form
{
public ChildFrm ()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Middle.DoSendMessage(this.textBox1.Text);
textBox1.Text = "";
textBox1.Focus();
}
}
Middle.cs:
public static class Middle
{
public delegate void SendMessage(string str);
public static event SendMessage sendEvent;
public static void DoSendMessage(string str)
{
sendEvent(str);
}
}
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 mainFrm = new Form1();
childFrm secondFrm = new childFrm();
secondFrm.Show();
Application.Run(mainFrm);
}
}
public partial class MainFrm: Form
{
private void MainFrm _Load(object sender, EventArgs e)
{
Middle.sendEvent += new Middle.SendMessage(this.DoMethod);
}
public void DoMethod(string getstr)
{
listBox1.Items.Add(getstr);
}
}
ChildFrm.cs:
public partial class ChildFrm: Form
{
public ChildFrm ()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Middle.DoSendMessage(this.textBox1.Text);
textBox1.Text = "";
textBox1.Focus();
}
}
Middle.cs:
public static class Middle
{
public delegate void SendMessage(string str);
public static event SendMessage sendEvent;
public static void DoSendMessage(string str)
{
sendEvent(str);
}
}
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 mainFrm = new Form1();
childFrm secondFrm = new childFrm();
secondFrm.Show();
Application.Run(mainFrm);
}
}
#5
private void button1_Click(object sender, EventArgs e)
{
int i = richTextBox1.Find("");
while (i > = 0)
{
richTextBox1.SelectedText= "";
i=richTextBox1.Find("");
}
richTextBox1.Focus();
}
{
int i = richTextBox1.Find("");
while (i > = 0)
{
richTextBox1.SelectedText= "";
i=richTextBox1.Find("");
}
richTextBox1.Focus();
}
#6
设置公共变量最简单,弹出窗口时给变量赋值,窗口关闭时进行查找替换操作。
#7
WinForm传值问题,简单的很
#8
呵呵 自己测试没有问题
// Form1 内代码被查找窗体
//form 2代码 查找窗体
// Form1 内代码被查找窗体
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.label1.Text = "快来查找我";
this.label2.Text = "";
}
Form2 f2 = new Form2();
private void button1_Click(object sender, EventArgs e)
{
f2.MyPing += new Form2.PING(f2_MyPing);
f2.Show();//显示form2
}
void f2_MyPing(string str)//form2 点击确定后的方法
{
this.richTextBox1.Refresh();
this.richTextBox1.SelectionFont = new Font("宋体", 9, FontStyle.Regular);//设置字体
this.richTextBox1.SelectionBackColor = Color.Blue;//设置选中后的颜色
this.label2.Text = str;//form2 选中后的参数
int na = this.richTextBox1.Text.IndexOf(str);
this.richTextBox1.Select(na, str.Length);//改变richTextBox值中查找的字体颜色
MessageBox.Show(na.ToString());
richTextBox1.SelectionBackColor = Color.Blue;//设置选中后的颜色
}
}
//form 2代码 查找窗体
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public delegate void PING(string str);
public event PING MyPing;
private void button1_Click(object sender, EventArgs e)
{
this.MyPing(this.textBox1.Text);
}
}
#9
呵呵…… 经典……
#10
再加一句:
父传子 借“构造”
子传父 用“属性”
至少,我经常这样弄…
父传子 借“构造”
子传父 用“属性”
至少,我经常这样弄…
#11
支持2楼的,其实原理很简单,无非是把父级对象传给子级,然后在子级调用父级的更新方法。不过要注意在调用的时候要防止用户关闭父级,不然会报错。。。
#12
上面都貼出OK的代碼了,我就順便頂一下吧。
#13
ok
#14
java3344520的方法很有用,受启发!
#1
在父窗体中创建一个自身的公共静态变量
class MainForm
{
public static MainForm mainForm=null;
MainForm()
{
mainForm=this;
}
}
class childForm
{
pbulci void SelectText()
{
MainForm.mainForm.richTextBox.SelectedStart=100;
}
}
class MainForm
{
public static MainForm mainForm=null;
MainForm()
{
mainForm=this;
}
}
class childForm
{
pbulci void SelectText()
{
MainForm.mainForm.richTextBox.SelectedStart=100;
}
}
#2
winform间传值
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show(this);
}
}
public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form1 frm1 = (Form1)this.Owner;
((TextBox)frm1.Controls["textBox1"]).Text = this.textBox2.Text;
this.Close();
}
}
还可使用委托
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show(this);
}
}
public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form1 frm1 = (Form1)this.Owner;
((TextBox)frm1.Controls["textBox1"]).Text = this.textBox2.Text;
this.Close();
}
}
还可使用委托
#3
正解
#4
通过委托实现复杂的窗体通信,比如可以传递复杂的数据类型,同时,可以在设计结构更加良好的中间通信类
public partial class MainFrm: Form
{
private void MainFrm _Load(object sender, EventArgs e)
{
Middle.sendEvent += new Middle.SendMessage(this.DoMethod);
}
public void DoMethod(string getstr)
{
listBox1.Items.Add(getstr);
}
}
ChildFrm.cs:
public partial class ChildFrm: Form
{
public ChildFrm ()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Middle.DoSendMessage(this.textBox1.Text);
textBox1.Text = "";
textBox1.Focus();
}
}
Middle.cs:
public static class Middle
{
public delegate void SendMessage(string str);
public static event SendMessage sendEvent;
public static void DoSendMessage(string str)
{
sendEvent(str);
}
}
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 mainFrm = new Form1();
childFrm secondFrm = new childFrm();
secondFrm.Show();
Application.Run(mainFrm);
}
}
public partial class MainFrm: Form
{
private void MainFrm _Load(object sender, EventArgs e)
{
Middle.sendEvent += new Middle.SendMessage(this.DoMethod);
}
public void DoMethod(string getstr)
{
listBox1.Items.Add(getstr);
}
}
ChildFrm.cs:
public partial class ChildFrm: Form
{
public ChildFrm ()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Middle.DoSendMessage(this.textBox1.Text);
textBox1.Text = "";
textBox1.Focus();
}
}
Middle.cs:
public static class Middle
{
public delegate void SendMessage(string str);
public static event SendMessage sendEvent;
public static void DoSendMessage(string str)
{
sendEvent(str);
}
}
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 mainFrm = new Form1();
childFrm secondFrm = new childFrm();
secondFrm.Show();
Application.Run(mainFrm);
}
}
#5
private void button1_Click(object sender, EventArgs e)
{
int i = richTextBox1.Find("");
while (i > = 0)
{
richTextBox1.SelectedText= "";
i=richTextBox1.Find("");
}
richTextBox1.Focus();
}
{
int i = richTextBox1.Find("");
while (i > = 0)
{
richTextBox1.SelectedText= "";
i=richTextBox1.Find("");
}
richTextBox1.Focus();
}
#6
设置公共变量最简单,弹出窗口时给变量赋值,窗口关闭时进行查找替换操作。
#7
WinForm传值问题,简单的很
#8
呵呵 自己测试没有问题
// Form1 内代码被查找窗体
//form 2代码 查找窗体
// Form1 内代码被查找窗体
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.label1.Text = "快来查找我";
this.label2.Text = "";
}
Form2 f2 = new Form2();
private void button1_Click(object sender, EventArgs e)
{
f2.MyPing += new Form2.PING(f2_MyPing);
f2.Show();//显示form2
}
void f2_MyPing(string str)//form2 点击确定后的方法
{
this.richTextBox1.Refresh();
this.richTextBox1.SelectionFont = new Font("宋体", 9, FontStyle.Regular);//设置字体
this.richTextBox1.SelectionBackColor = Color.Blue;//设置选中后的颜色
this.label2.Text = str;//form2 选中后的参数
int na = this.richTextBox1.Text.IndexOf(str);
this.richTextBox1.Select(na, str.Length);//改变richTextBox值中查找的字体颜色
MessageBox.Show(na.ToString());
richTextBox1.SelectionBackColor = Color.Blue;//设置选中后的颜色
}
}
//form 2代码 查找窗体
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public delegate void PING(string str);
public event PING MyPing;
private void button1_Click(object sender, EventArgs e)
{
this.MyPing(this.textBox1.Text);
}
}
#9
呵呵…… 经典……
#10
再加一句:
父传子 借“构造”
子传父 用“属性”
至少,我经常这样弄…
父传子 借“构造”
子传父 用“属性”
至少,我经常这样弄…
#11
支持2楼的,其实原理很简单,无非是把父级对象传给子级,然后在子级调用父级的更新方法。不过要注意在调用的时候要防止用户关闭父级,不然会报错。。。
#12
上面都貼出OK的代碼了,我就順便頂一下吧。
#13
ok
#14
java3344520的方法很有用,受启发!