FastColoredTextbox AutoWordSelection?

Ele*_*ios 13 .net c# vb.net user-controls winforms

FastColoredTextbox是一个可以在此URL中下载的用户控件,它看起来像这样:

在此输入图像描述

它是一个惊人的控件,但只能在双击文本时选择一个单词,不能按住鼠标选择更多的单词,所以它只选择鼠标指针上的整个当前单词,即使你试图将鼠标光标向左移动或者右边选择更多文字.

我没有找到解释问题的任何信息,所有官方示例项目都有这个问题.

没有人意味着如何为控件创建AutoWordSelection一个默认值,但即使最重要的是:TextBoxFastcoloredTextbox

如何用鼠标选择多个单词?

更新:

@ mostruash答案非常有启发性,但在这段时间里,我无法自己进行修改.

我需要C#程序员的大力帮助来完成这项任务,我对C#的了解非常少,而且我对源代码的修改不起作用(不编译),我回到原来的用户控件来源不会最终破坏更多.我讨厌这样说,但这次我需要完成这项工作,这个来源对我来说太过分了.

如果我要求太多,那么也许可以使用C#开发人员的必要扩展指令,解释如何一步一步地完成这个,也许我可以自己执行它.

UPDATE

一个解释问题的视频:

https://www.youtube.com/watch?v=Cs2Sh2tMvII

UPDATE

另一个演示,我展示了什么FastColoredTextBox 不能做,但我想像其他文本编辑器一样做:

在此输入图像描述

mos*_*ash 18

我检查了项目的源代码.如果发生双击SelectWord并被调用,则取消拖动.

您可以修改源代码以包含您请求的功能.(https://github.com/PavelTorgashov/FastColoredTextBox).在这种情况下:

  • 您必须跟踪以双击开头的选择.
  • 而不是调用SelectWord函数,使用Selection类和draggedRange属性来标记选定的单词OnMouseMove.
  • 您还必须处理取消选择的单词OnMouseMove.
  • 您还必须在单词之间选择空格OnMouseMove.

双击在下面的代码中处理:

            if (!isLineSelect)
            {
                var p = PointToPlace(e.Location);

                if (e.Clicks == 2)
                {
                    mouseIsDrag = false; //Here, drag is cancelled. 
                    mouseIsDragDrop = false;
                    draggedRange = null; //Drag range is nullified

                    SelectWord(p); //SelectWord is called to mark the word
                    return;
                }

                if (Selection.IsEmpty || !Selection.Contains(p) || this[p.iLine].Count <= p.iChar || ReadOnly)
                    OnMouseClickText(e);
                else
                {
                    mouseIsDragDrop = true;
                    mouseIsDrag = false;
                }
            }
Run Code Online (Sandbox Code Playgroud)

编辑:

这可能需要做很多工作.所以也许你应该使用另一个工具/库.我没有研究过整个源代码,因此上面提供的内容可能还有其他步骤.

例如,要跟踪双击,您可以执行以下操作:

  • FastColoredTextbox.cs:中定义一个类变量/属性bool isDoubleClick.
  • 将其设置为trueOnMouseDownif(e.Clicks == 2)的状态.将其设置为false所有其他条件.
  • 在其中OnMouseClickOnMouseUp其他相关鼠标事件处理程序中将其设置为false .

这样你就会知道一系列鼠标事件是否已经以双击事件开始.然后你会相应地采取行动,OnMouseMove因为那是你(联合国)标记字符或(联合国)标记文字的地方.

最后一句小心:

该项目的作者没有包含任何内联注释或任何其他文档方法,因此您将逐行学习代码以了解每个函数/部分的作用.

  • stackoverflow.com不是freelancer.com (23认同)