[求助] TextBox选择文本问题

bananachueng 2012-03-11 04:24:04
有2个窗体 MainForm和SearchForm, 2个窗体各有一个TextBox控件和一个Button控件.
我的设计意图是,其实就是记事本的查找功能:
1.程序启动时只显示Main. (己实现)
2.单击MainForm中的Button显示SearchForm, 并助SearchForm始终置顶. (己实现)
3.在SearchForm的TextBox中填入一个字符(串), 单击按钮, 在MainForm中查找相应的字符串.(己实现)
4.当找到字符串时,在MainForm的TextBox中选中文本. (未实现)

我的第四步代码如下:


private MainForm mf = new MainForm();

private void button1_Click(object sender, EventArgs e)
{
String searchString = this.textBox1.Text;

int index = mf.textBox1.Text.IndexOf(searchString);
if (index != -1)
{
mf.textBox1.Select(index, searchString.Length);
}
}



现在出现的问题是, mf.textBox1.Select(index, searchString.Length); 语句己经起作用, 但是未在MainForm.TextBox中选中文本(没有阴影状态).

请各位知道问题所在的同学帮忙.在线等.
...全文
139 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bananachueng 2012-03-11
  • 打赏
  • 举报
回复
我大概明白什么意思了..谢谢各位.
crystal_lz 2012-03-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 bananachueng 的回复:]

引用 11 楼 crystal_lz 的回复:

引用 10 楼 bananachueng 的回复:

谢谢楼上2楼.问题己经解决.另还有问题请教.
为什么我的SerachForm中new一个MainForm就没有选中效果呢?

呃 不知道你的代码是怎么写的 、、、

4楼己给出.请参考
[/Quote]
好吧 我反应过来了 肯定没效果 必须没效果

namespace testDemo
{
public partial class SearchForm : Form
{
public SearchForm()
{
InitializeComponent();
}

private MainForm mf = new MainForm();

private void button1_Click(object sender, EventArgs e)
{
String searchString = this.textBox1.Text;

int index = mf.textBox1.Text.IndexOf(searchString);
if (index != -1)
{
mf.textBox1.Select(index, searchString.Length);
}
}
}
}

private MainForm mf = new MainForm();
你看看我的那个
你是直接new出来的一个MainForm和你原来那个Mainform一点关系都没有、、
我的代码里面 是直接接收的原来的Form1而不是new的一个Form1
bananachueng 2012-03-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 crystal_lz 的回复:]

引用 10 楼 bananachueng 的回复:

谢谢楼上2楼.问题己经解决.另还有问题请教.
为什么我的SerachForm中new一个MainForm就没有选中效果呢?

呃 不知道你的代码是怎么写的 、、、
[/Quote]
4楼己给出.请参考
crystal_lz 2012-03-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bananachueng 的回复:]

谢谢楼上2楼.问题己经解决.另还有问题请教.
为什么我的SerachForm中new一个MainForm就没有选中效果呢?
[/Quote]
呃 不知道你的代码是怎么写的 、、、
bananachueng 2012-03-11
  • 打赏
  • 举报
回复
谢谢楼上2楼.问题己经解决.另还有问题请教.
为什么我的SerachForm中new一个MainForm就没有选中效果呢?
crystal_lz 2012-03-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bananachueng 的回复:]

回#6楼
我也试了,而且 F1,TBox.Focus()无论放F1.TBox.Select(1,2)的前面还是后面,效果都不显示出来,就是说没有被选中的效果.

另外,发现如果是在同一窗体进行搜索的话,文本有被选中的效果.
[/Quote]
得、、我把我的全部代码放上来 、、、
form1:

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

private TextBox tBox;
public TextBox TBox {
get { return textBox1; }
set { textBox1 = value; }
}

private void button1_Click(object sender, EventArgs e) {
new Form2(this).Show();
}
}
}

Form2:

{
public partial class Form2 : Form
{
Form1 F1;
public Form2(Form1 f) {
InitializeComponent();
F1 = f;
}

private void Form2_Load(object sender, EventArgs e) {
this.TopMost = true;
}
private void button1_Click(object sender, EventArgs e) {
F1.TBox.Select(1,2);
F1.TBox.Focus();
}
}

这个是我的代码 没有任何问题、、
ziyouli 2012-03-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bananachueng 的回复:]
引用楼主 bananachueng 的回复:
有2个窗体 MainForm和SearchForm, 2个窗体各有一个TextBox控件和一个Button控件.
我的设计意图是,其实就是记事本的查找功能:
1.程序启动时只显示Main. (己实现)
2.单击MainForm中的Button显示SearchForm, 并助SearchForm始终置顶. (己实现)
3.在SearchForm……
[/Quote]
其实楼上几位已经帮你解决问题了,MainForm.TextBox.Foucs();你会无效那是因为你代码里用到MainForm的时候并非是之前已经创建的实例,而是你又再次new了一个出来,然后你操作的其实是你后来new出来的实例,你把代码修改下:

MainForm显示的时候:
new SearchForm().Show(this);
同时记得把TextBox1的访问级别改为public!

SearchForm:
private void button1_Click(object sender, EventArgs e)
{
String searchString = this.textBox1.Text;

int index = (this.Owner as MainForm).textBox1.Text.IndexOf(searchString);
if (index != -1)
{
(this.Owner as MainForm).textBox1.Select(index, searchString.Length);
}
}
bananachueng 2012-03-11
  • 打赏
  • 举报
回复
回#6楼
我也试了,而且 F1,TBox.Focus()无论放F1.TBox.Select(1,2)的前面还是后面,效果都不显示出来,就是说没有被选中的效果.

另外,发现如果是在同一窗体进行搜索的话,文本有被选中的效果.
crystal_lz 2012-03-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bananachueng 的回复:]

引用楼主 bananachueng 的回复:
有2个窗体 MainForm和SearchForm, 2个窗体各有一个TextBox控件和一个Button控件.
我的设计意图是,其实就是记事本的查找功能:
1.程序启动时只显示Main. (己实现)
2.单击MainForm中的Button显示SearchForm, 并助SearchForm始终置顶. (己实现)
3.在SearchFor……
[/Quote]
刚才我直接写了一个下、、我确信没有问题

private void Form2_Load(object sender, EventArgs e) {
pictureBox1.BackColor = Color.Red;
//timer1.Interval = 1;
//timer1.Enabled = true;
//SetWindowLong((IntPtr)0x000506AE, GWL_EXISTYLE, WS_EX_TOOLWINDOW);
this.TopMost = true;
}
private void button1_Click(object sender, EventArgs e) {
//F1.Btn.Focus();
F1.TBox.Select(1,2);
F1.TBox.Focus();
//new Thread(new ThreadStart(MovePic)).Start();
}

在Form1中的textbox的第二个和第三个被选中了
bananachueng 2012-03-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sofant 的回复:]

textbox的HideSelection设为false
[/Quote]

这个属性设为True或False都没效果.谢谢.
bananachueng 2012-03-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 bananachueng 的回复:]
有2个窗体 MainForm和SearchForm, 2个窗体各有一个TextBox控件和一个Button控件.
我的设计意图是,其实就是记事本的查找功能:
1.程序启动时只显示Main. (己实现)
2.单击MainForm中的Button显示SearchForm, 并助SearchForm始终置顶. (己实现)
3.在SearchForm的TextBox中填入一个字符(串), 单击按钮……
[/Quote]

谢谢两位, 两位提供的方法都是 MainForm.TextBox.Foucs();
但这个方法我之前己经试过了,没效果.但用MessageBox.show()方法显示选中字符串时,能得到正确的字符.

回3楼,步骤2的实现方法是先将SearchForm的TopMost设为True,其余代码如下,抱歉这只是个有漏洞的版本:

// SearchForm.cs

using System.Text;
using System.Windows.Forms;

namespace testDemo
{
public partial class SearchForm : Form
{
public SearchForm()
{
InitializeComponent();
}

private MainForm mf = new MainForm();

private void button1_Click(object sender, EventArgs e)
{
String searchString = this.textBox1.Text;

int index = mf.textBox1.Text.IndexOf(searchString);
if (index != -1)
{
mf.textBox1.Select(index, searchString.Length);
}
}
}
}





sofant 2012-03-11
  • 打赏
  • 举报
回复
textbox的HideSelection设为false
crystal_lz 2012-03-11
  • 打赏
  • 举报
回复
你先试试 让textbox获得焦点 他确实是选中了的呢 只是焦点在你的那个button上呢 ?
textbox.focus()
菜鸟之极 2012-03-11
  • 打赏
  • 举报
回复
给你个地址你看一下,可能会对你有帮助,如果可以能不能告诉我怎样让你的功能中的2、3如何实现?
http://blog.csdn.net/zwk_9/article/details/6424594

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧