gpt4 book ai didi

c# - 在丰富的文本框中包装文本,但不包装它

转载 作者:太空狗 更新时间:2023-10-29 23:03:48 24 4
gpt4 key购买 nike

我有一个 Windows 窗体,窗体上有一个富文本框控件。我想要做的是让每一行只接受 32 个字符的文本。在 32 个字符之后,我希望文本流到下一行(我不想插入任何回车符)。 WordWrap 属性几乎可以做到这一点,除了它将所有输入的文本移动到文本中的最后一个空格并将其全部移动。我只想在 32 个字符之后整齐地包装文本。我怎样才能做到这一点?我正在使用 C#。

最佳答案

好的,我找到了一种方法(在大量谷歌搜索和 Windows API 引用之后),我在这里发布了一个解决方案,以防其他人需要解决这个问题。对此没有干净的 .NET 解决方案,但幸运的是,Windows API 允许您覆盖处理自动换行时调用的默认过程。首先,您需要导入以下 DLL:

[DllImport("user32.dll")]

extern static IntPtr SendMessage(IntPtr hwnd, uint message, IntPtr wParam, IntPtr lParam);

然后你需要定义这个常量:

 const uint EM_SETWORDBREAKPROC = 0x00D0;

然后创建委托(delegate)和事件:

    delegate int EditWordBreakProc(IntPtr text, int pos_in_text, int bCharSet, int action);

event EditWordBreakProc myCallBackEvent;

然后创建我们的新函数来处理自动换行(在本例中我不希望它做任何事情):

     private int myCallBack(IntPtr text, int pos_in_text, int bCharSet, int action)

{

return 0;

}

最后,在表单的 Shown 事件中:

        myCallBackEvent = new EditWordBreakProc(myCallBack);

IntPtr ptr_func = Marshal.GetFunctionPointerForDelegate(myCallBackEvent);

SendMessage(txtDataEntry.Handle, EM_SETWORDBREAKPROC, IntPtr.Zero, ptr_func);

关于c# - 在丰富的文本框中包装文本,但不包装它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3938998/

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