gpt4 book ai didi

c# - 文本框中是否有选择文本事件

转载 作者:行者123 更新时间:2023-11-30 13:55:12 24 4
gpt4 key购买 nike

我正在创建一个小文本编辑器(就像记事本一样)。我的表单上有几个按钮(剪切、删除、复制)。我希望他们在没有选择文本时无法使用,反之亦然...选择文本时是否会发生某些事件?我使用文本框控件。

最佳答案

没有这样的事件,但幸运的是有解决方法:

1) 通过你自己在 Application.Idle 事件上更新 UI 来完成(我承认这不是最好的解决方案,但它通常是我最喜欢的,因为它更容易实现):

Application.Idle += OnIdle;

然后:

private void OnIdle(object sender, EventArgs e) {
btnCopy.Enabled = txtEditor.SelectionLength > 0;
}

2) 从 RichTextControl 派生您自己的类(如果您必须处理巨大的 - 而不仅仅是大文件,则不是最佳解决方案)并处理 EN_SELCHANGE 通知(最强大的一个也与我看到的每个 IME 兼容)。概念证明(从 MSDN 中选择适当的值,不要忘记将 ENM_SELCHANGE 设置为 EM_SETEVENTMASK):

public class TextBoxEx : TextBox {
public event EventHandler SelectionChanged;

protected override void WndProc(ref Message m) {
base.WndProc(ref m);

if (m.Msg == WM_NOTIFY && m.lParam == EN_SELCHANGE) {
OnSelectionChanged(EventArgs.Empty);
}
}

// ...
}

您可以这样做,但是...默认控件已经为您提供了此功能:它有一个 SelectionChanged 事件。

如果您还支持剪贴板粘贴,请小心,因为您需要根据剪贴板内容更新您的粘贴按钮(然后再次在 Application.Idle 中更容易放置)。在 RichTextControl 上调用 CanPaste() 和类似方法可能会破坏一些 IME ( see also In Idle cannot access RichTextControl or IME will not work )。

关于c# - 文本框中是否有选择文本事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36308850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com