回 帖 发 新 帖 刷新版面

主题:关于鼠标事件的问题

我现在想实现这样一个功能,在TextBox中显示的一个句子,我用鼠标选中并双击某个词时,这个词就自动地显示在另一个TextBox中。
请问用什么样的鼠标事件可以做到,DoubleClick吗,可是我怎么把这个选中的词提出来呢。
谢谢![em2]

回复列表 (共7个回复)

沙发

只能自己写代码进行识别吧。

板凳

楼上的朋友,能给一些提示吗

3 楼

说详细一点我在一个TextBox中显示的文本中点击鼠标,选中我要的词,那么这个词就反白色了,然后我双击这个词,这个词就到了另一个文本框中去了。
请问应如何实现,非常感谢。

4 楼

试了一下,可以实现。
主要是用基本的时间去拼凑更复杂的事件。
注意一下“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 楼


            // 
            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 楼

其实
如果你用RichTextBox这个控件的话,里面就直接有一个SelectionChanged事件应该可以实现你要得功能~!

7 楼

wadelee,非常感谢你,我前几天有事无法上网,我已经实现这个功能了,非常感谢。

我来回复

您尚未登录,请登录后再回复。点此登录或注册