是否可以将插入符号移动到WFA中文本框的第一个可见行

时间:2018-04-04 14:11:46

标签: c#

是的,可以使用此代码。效果很好。

这适用于你的班级

    const int EM_GETFIRSTVISIBLELINE = 0x00CE;
    [System.Runtime.InteropServices.DllImport("User32")]
    static extern int SendMessage(IntPtr hwnd, int msg, int wParam, int lParam);

这是你的方法

        int ii = SendMessage(textBox1.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);

        textBox1.Focus();

        textBox1.SelectionLength = 0;

        textBox1.SelectionStart = textBox1.GetFirstCharIndexFromLine(ii);

但是在我的构建错误列表中,我收到此警告,我不知道如何修复

  

因为它是P / Invoke方法,'tWUtil.SendMessage(IntPtr,int,int,   int)'应该在名为NativeMethods的类中定义,   SafeNativeMethods,或UnsafeNativeMethods。

2 个答案:

答案 0 :(得分:0)

这是CA1060:将P / Invokes移动到NativeMethods类验证。

  

原因一种方法使用平台调用服务来访问非托管代码,并且不是其中一个NativeMethods的成员   类。

ca1060-move-p-invokes-to-nativemethods-class

  

如何修复违规行为

     

要修复违反此规则的问题,请将方法移至相应的位置   NativeMethods类。对于大多数应用程序,将P / Invokes移动到新的   名为NativeMethods的类就足够了。

等...

答案 1 :(得分:0)

满足CA1060:将P / Invokes移动到NativeMethods类验证。

这适用于您的方法

        textBox1.Focus();
        const int EM_GETFIRSTVISIBLELINE = 0x00CE;
        int ii = NativeMethods.SendMessage(textBox1.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);

        textBox1.Focus();
        textBox1.SelectionLength = 0;
        textBox1.SelectionStart = textBox1.GetFirstCharIndexFromLine(ii);

你把它变成了一个类

public static class NativeMethods
{
    [System.Runtime.InteropServices.DllImport("User32")]
    internal static extern int SendMessage(IntPtr hwnd, int msg, int wParam, int lParam);
}