RichTextBox 并在插入符位置插入

2024-04-11

事情是这样的:我有一个 RichTextBox 控件,它工作正常。问题是有一个按钮“插入当前日期时间”,它将当前日期时间添加/注入到 RichTextBox 中。用户可以在插入符号指向的任何位置输入日期时间。这涉及复杂的字符串操作之类的东西。

任何如何获得当前插入符位置的想法。每当我得到 RichTextBox.CaretPositon 时,它似乎指向 RichTextBox 的开头,而不是实际插入符所在的位置。

更新1:

日期时间按钮点击代码:

 private void DateTimeStampButton_Click(object sender, RoutedEventArgs e)
        {
            //TextRange tr = new TextRange(textBox.Selection.Start, textBox.Selection.End);
            var tr = new TextRange(textBox.Document.ContentStart, textBox.Document.ContentEnd);

            if(tr.Text.Length == 2)
            {
                if(tr.Text == "\r\n")
                {
                    tr.Text = tr.Text.TrimStart(new[] { '\r', '\n' }); 
                }
            }

            textBox.CaretPosition.InsertTextInRun(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + ":  ");

            DateTimeStampButton.Focusable = false;
        }

 private void SharpRichTextBox_LostFocus(object sender, RoutedEventArgs e)
        {
            SetValue(TextProperty, Text);

            var binding = BindingOperations.GetBinding(this, TextProperty);

            if (binding == null) return;

            if (binding.UpdateSourceTrigger == UpdateSourceTrigger.Default || binding.UpdateSourceTrigger == UpdateSourceTrigger.LostFocus)
            {
                // if (TextProperty != null) BindingOperations.GetBindingExpression(this, TextProperty).UpdateSource();
            }
        }






public string Text
        {
            get
            {
                var newValue = new TextRange(Document.ContentStart, Document.ContentEnd).Text.RemoveNewLineAndReturn(); 
                return newValue; 
            }
            set
            {
                if (!String.IsNullOrEmpty(value))
                {
                    SetValue(TextProperty, value.RemoveNewLineAndReturn());
                    Document.Blocks.Clear(); 
                    Document.Blocks.Add(new Paragraph(new Run(value))); 
                    OnPropertyChanged("Text"); 
                }
            }
        }

更新2:

事实证明,问题出在“日期时间”按钮可聚焦上。我把它设置为不可聚焦,并且它按预期工作。当 RichTextBox 失去焦点时,它正在重置插入符号位置。它只发生一次,因为在代码中 btn_DateTime 被动态设置为 Focusable = false。我将 Focusable = false 放置在 XAML 中,从一开始一切都运行良好。


我正在使用此代码成功完成您正在尝试的操作:

private void insertNowButton_Click(object sender, RoutedEventArgs e)
{
    //NOTE:  The caret position does not change.
    richTextBox1.CaretPosition.InsertTextInRun(DateTime.Now.ToString());
}

EDIT:寻址更新 1

private void DateTimeStampButton_Click(object sender, RoutedEventArgs e)
{
    var tr = new TextRange(textBox.Document.ContentStart, textBox.Document.ContentEnd);

    if (tr.Text.Length == 2)
    {
        if (tr.Text == "\r\n")
        {
            tr.Text = tr.Text.TrimStart(new[] { '\r', '\n' });
        }
    }

    /* Changing the text is the only way I can get the date to insert at the beginning */
    tr.Text = "I need a beer at ";

    textBox.CaretPosition.InsertTextInRun(DateTime.Now.ToString());
}

看起来像SetValue正在更改文本,因此根据我的测试,实际更改文本会重置插入符号,我同意你的观点SetValue导致问题...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RichTextBox 并在插入符位置插入 的相关文章

随机推荐

  • 在R中,如何制作箱线图?

    我的输入表有两列 如下所示 x y 1 187 2 235 3 857 3 253 2 955 1 267 我想为每个单独的 x 值绘制 y 值的箱线图 x 值限制为 1 2 3 这是我的 R 代码 data read table inpu
  • VBA 脚本导致 Excel 在 15 次循环后没有响应

    我正在运行一个脚本来查找并删除包含 2018 年之后数据的行 我正在搜索大约 650000 行 每次我在 5 秒后运行脚本时 光标都会变成旋转的圆圈 并且 Excel 程序变得无响应 这是我正在使用的代码 Option Explicit O
  • 设置 Keycloak 返回的访问令牌的范围

    我正在关注这个教程https medium com sairamkrish keycloak integration part 3 integration with python django backend 5dac3b4a8e4e ht
  • 我可以通过 npm 分发非 javascript 文件吗?

    如果您将 Npm 与 TypeScript 或 JavaScript 一起使用 它是一个很棒的工具 但据我所知 看起来可以通过 node npm 分发任何类型的项目或语言 例如 假设我创建了一个包含一些库的 php phar 文件 我可以使
  • 将新行添加到数据表的顶部

    当我们使用 datatable newrow 命令时 一个新的空行添加到行的底部 但是我希望将 newrow 添加到数据表的顶部 我怎样才能做到呢 您可以使用 NewRow 创建具有相同列的行 要真正将其放入数据表中 您必须执行以下操作 m
  • 摩纳哥编辑器:隐藏概述标尺

    有没有办法在摩纳哥编辑器中完全隐藏概述标尺 通过以下内容仍然可见 overviewRulerLanes 0 hideCursorInOverviewRuler true scrollbar vertical hidden overviewR
  • Android“找不到字体资源”错误

    我正在为 Android 版本 22 进行开发 我收到运行时异常 找不到字体资源 这是代码 Typeface customFont Typeface createFromAsset getAssets fonts norwester otf
  • 如何在嵌入式 YouTube iFrame 端触发功能

    尝试在嵌入式 YouTube iFrame 末端触发函数 只需要知道如何找到终点 之后我就很好了 很难从你的问题中看出 但听起来你想在 YouTube 视频结束时触发一个事件 您可以使用下面的示例代码设置事件处理程序 player new
  • 估计测试工作量占开发时间的百分比[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • sql server图形查询,找到节点的所有路径

    我有一个非常常见的问题 我试图使用图形查询来解决 sql server 2017 我想构建一个查询并查找节点中的任何人如何连接到C 我想构建一个查询并查找节点中的任何人如何连接到C 有 1 或 2 个连接 这是创建该图的完整脚本 DROP
  • 使用 Facebook v2.1 Graph API 通过 cURL 以编程方式创建测试用户

    我想以编程方式为我的 Facebook 应用程序创建 Facebook 测试用户 我一直在查看 HTTP Facebook Graph API v2 1 的 API 文档 https developers facebook com docs
  • 如何检测 mongodb 序列化程序是否已注册?

    我为 mongoDB 创建了一个自定义序列化器 我可以注册它并且它按预期工作 然而 我的应用程序有时会抛出错误 因为它尝试注册序列化器两次 如何检测序列化器是否已注册 从而阻止我的应用程序再次注册 如果您正在使用 BsonSerialize
  • iTunes Connect 中的无限制 Web 访问意味着什么

    当您将应用程序提交到Apple应用程序商店时 有一个名为 评级 的部分 您应该根据图表对内容进行评级并确定内容出现的频率 有一个选项称为 无限制的网络访问 互联网上也没有关于此的更多详细信息 iTunes Connect 开发人员指南 ht
  • 意图设置标志 FLAG_ACTIVITY_CLEAR_TOP

    在Android上 我启动了4个活动A B C D 如果我想从D返回到A 我可以使用 intent setFlags Intent FLAG ACTIVITY CLEAR TOP 但如果活动是如下打开的同班活动 我现在如何从D回到A Int
  • ORDER BY 日期和时间 BEFORE GROUP BY mysql 中的名称

    我有一张这样的桌子 name date time tom 2011 07 04 01 09 52 tom 2011 07 04 01 09 52 mad 2011 07 04 02 10 53 mad 2009 06 03 00 01 01
  • 如何让用户轻松选择在 Java Swing 应用程序中分配多少内存?

    我们有一个处理相对大量数据的 Swing 应用程序 例如 我们目前处理包含数百万行数据的 CSV 文件 出于性能和简单性的原因 我们将所有数据保留在内存中 然而 不同的用户需要处理的数据量以及 RAM 量也不同 创建安装程序时 我们当然需要
  • 使用属性名称构建 OrderBy 表达式

    我正在尝试通过以下方式支持排序WebGridMVC3 中的控件 它将模型上的属性名称通过sort范围 public class Agent public int Id get set public string Name get set H
  • 在 Visual Studio 中使用 VSCode 扩展

    今天我发现了一个VSCode 扩展 https marketplace visualstudio com items itemName GrapeCity gc excelviewer我非常想在 Visual Studio 2017 专业版
  • REST API 设计中的查找或创建习惯用法?

    假设我们有一个 用户 资源 对 名称 有唯一的约束 您将如何设计 REST API 来处理查找或创建 按名称 用例 我看到以下选项 选项 1 多个请求 client POST user name bob server HTTP 409 or
  • RichTextBox 并在插入符位置插入

    事情是这样的 我有一个 RichTextBox 控件 它工作正常 问题是有一个按钮 插入当前日期时间 它将当前日期时间添加 注入到 RichTextBox 中 用户可以在插入符号指向的任何位置输入日期时间 这涉及复杂的字符串操作之类的东西