主题:关于鼠标事件的问题
liuwei424
[专家分:30] 发布于 2006-12-16 13:59:00
我现在想实现这样一个功能,在TextBox中显示的一个句子,我用鼠标选中并双击某个词时,这个词就自动地显示在另一个TextBox中。
请问用什么样的鼠标事件可以做到,DoubleClick吗,可是我怎么把这个选中的词提出来呢。
谢谢![em2]
回复列表 (共7个回复)
沙发
wuyifan [专家分:170] 发布于 2006-12-16 17:14:00
只能自己写代码进行识别吧。
板凳
liuwei424 [专家分:30] 发布于 2006-12-16 17:32:00
楼上的朋友,能给一些提示吗
3 楼
liuwei424 [专家分:30] 发布于 2006-12-16 19:35:00
说详细一点我在一个TextBox中显示的文本中点击鼠标,选中我要的词,那么这个词就反白色了,然后我双击这个词,这个词就到了另一个文本框中去了。
请问应如何实现,非常感谢。
4 楼
wadelee [专家分:90] 发布于 2006-12-17 03:33:00
试了一下,可以实现。
主要是用基本的时间去拼凑更复杂的事件。
注意一下“textBox1_MouseMove”事件,里面动态的给鼠标又添加了“textBox1_MouseUp”事件,让鼠标在弹起的时候将你先前选中的文本拷贝到系统的剪粘板里了。
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace WindowsApplication2
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox2 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// textBox1
5 楼
wadelee [专家分:90] 发布于 2006-12-17 03:34:00
//
this.textBox1.Location = new System.Drawing.Point(8, 40);
this.textBox1.Multiline = true;
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(88, 80);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "textBox1";
this.textBox1.DoubleClick += new System.EventHandler(this.textBox1_DoubleClick);
this.textBox1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.textBox1_MouseMove);
//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(120, 96);
this.textBox2.Multiline = true;
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(136, 88);
this.textBox2.TabIndex = 1;
this.textBox2.Text = "textBox2";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void textBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(e.Button == System.Windows.Forms.MouseButtons.Left)
{
this.textBox1.MouseUp +=new MouseEventHandler(textBox1_MouseUp);
}
}
private void textBox1_DoubleClick(object sender, System.EventArgs e)
{
this.textBox2.Clear();
this.textBox2.Paste();
}
private void textBox1_MouseUp(object sender, MouseEventArgs e)
{
this.textBox1.Copy();
}
}
}
6 楼
wadelee [专家分:90] 发布于 2006-12-17 03:37:00
其实
如果你用RichTextBox这个控件的话,里面就直接有一个SelectionChanged事件应该可以实现你要得功能~!
7 楼
liuwei424 [专家分:30] 发布于 2006-12-20 14:45:00
wadelee,非常感谢你,我前几天有事无法上网,我已经实现这个功能了,非常感谢。
我来回复