日期:2014-05-19  浏览次数:20937 次

文本框双击时,怎样才能不自动选定文本框的内容?
我需要设置这样一个功能:
        用户选定文本框textbox1中部分内容,然后双击该文本框,另外一个文本框textbox2自动显示用户选中的内容。
        问题是,当双击文本框textbox1时候,选定的内容自动变为文本框textbox1的text值,而不是用户刚才所选定的内容,请问各位高才,怎样解决这个问题?务必不吝赐教!
ps:出于某些原因,必须是左键双击文本框,不能左键单击,不能右键单击,不能右键双击。

------解决方案--------------------
private void textBox1_DoubleClick(object sender, System.EventArgs e)
{
textBox2.Text=ss;
((TextBox)sender).SelectionLength=0;
}

private void textBox1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(((TextBox)sender).SelectedText!= " ")
ss=((TextBox)sender).SelectedText;
}
照这个思路改进一下应该可以
------解决方案--------------------
用拖放倒是一个好方法,但TextBox处理起来就太困难了
我现在能想到的就是通过截获鼠标点击消息来实现
当然有个方案是最简单的,用RichTextBox,本身就支持改功能
还能从网页上托文字...
直需要处理一下回车,用户使用上和TextBox没有差异
richTextBox1.EnableAutoDragDrop = true;
------解决方案--------------------
你从TextBox继承一个新的编辑控件,代码参考如下,然后在窗体上应用这个新的编辑控件就基本上实现了你要的功能,注意它里面有一个自定义的事件OnMouseDblClick(鼠标双击的时候引发的事件):
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace TextBoxApp
{
class DblTextBox:TextBox
{
public event EventHandler OnMouseDblClick;
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x201)
{
if (this.SelectionLength > 0)
{
int index = this.GetCharIndexFromPosition(this.PointToClient(Control.MousePosition));
if (index > this.SelectionStart && index < this.SelectionStart + this.SelectionLength)
{
return;
}
}
}
else if (m.Msg == 0x203)
{
if (this.OnMouseDblClick != null)
{
this.OnMouseDblClick(this, new EventArgs());
}
return;
}
base.WndProc(ref m);
}
}
}