Winforms 如何将屏幕上的指针固定到所需位置?

Winforms 如何将屏幕上的指针固定到所需位置?,winforms,mailmerge,Winforms,Mailmerge,我正在使用Winform作为工具进行邮件合并。我提供了两个模板,一个用于商业信函,另一个用于备忘录。对于信件,用户通常键入信件的正文,而其他信息则从用户通过单击“选择收件人”选项创建的数据文件中选取 我想限制我的用户只键入正文,并且指针必须位于第二行称呼之后。指针不能从该位置向后移动,但当然可以向前移动。我该怎么做 如果我不清楚,很抱歉。如果您的文本在文本框或RichTextBox中,您可以选择控件并用鼠标放置光标 // Set the cursor into the text box body

我正在使用Winform作为工具进行邮件合并。我提供了两个模板,一个用于商业信函,另一个用于备忘录。对于信件,用户通常键入信件的正文,而其他信息则从用户通过单击“选择收件人”选项创建的数据文件中选取

我想限制我的用户只键入正文,并且指针必须位于第二行称呼之后。指针不能从该位置向后移动,但当然可以向前移动。我该怎么做

如果我不清楚,很抱歉。

如果您的文本在文本框或RichTextBox中,您可以选择控件并用鼠标放置光标

// Set the cursor into the text box
bodyTextBox.Focus();

// Place the cursor at the desired position in the text
bodyTextBox.Select(start, 0);
你必须弄清楚第三行从哪里开始

const int indent = 30; // Desired indentation

// Place focus in this control
bodyTextBox.Focus();

// The following work only if we have at least 3 lines of text
if (bodyTextBox.Lines.Length >= 3) {

    int start = bodyTextBox.Lines[0].Length + // Length of first line
                bodyTextBox.Lines[1].Length + // Length of second line
                4 +   // 2 x 2 characters for two CR-LFs
                Math.Min(indent, bodyTextBox.Lines[2].Length);
    bodyTextBox.Select(start, 0);
}
我假设文本看起来像这样

First line of text.<CR><LF> Second line of text.<CR><LF> <30 spaces for indent> ^ desired position 为了将光标设置在正确的位置,我们需要计算文本开头的字符总数。由于要将光标定位在第三行上,因此这是两个第一行的长度加上两个CR LF,即其末尾的换行字符加上第三行开头的30个字符。如果第三行长度小于30个字符,我们无法将光标放在那里,因此我们将光标放在尽可能靠右的位置,即使用Math.Minindent,bodyTextBox.Lines[2]将光标放在这一行的最后一个字符上


最后,我们用Select将光标放在那里。由于我们不想选择文本,我们将选择的长度定义为零。

请提供更多详细信息,说明您如何在winform应用程序中使用这些模板?还可以提供一些代码吗?不,不,我的文本在RichTextBox中,而TextBix是为收件人和发件人地址等数据保留的,发件人的名称和其他信息参数将放置在文本框中,该文本框将从上述数据文件中检索。我想改变光标在RTB文档中的位置,RTB文档中包含文本框,但您没有指定;但是,这不是问题,因为TextBox和RichTextBox都继承了它们的Lines属性,并从TextBoxBase中选择方法,从控件中选择焦点方法。这意味着完全相同的解决方案也适用于RichTextBox。我添加了代码注释和解释。注意:这是一个C代码。我没有看到任何语言标签,也没有在你的问题中提到任何语言。我也在研究C,所以这不是问题,假设RTB是空的,我希望用户从第10行开始键入,留下10行空白,这里没有文本。当表单显示给用户时,光标必须位于第10行,不允许用户在该区域输入文本,即从10行开始。如果用户必须从第10行开始键入,则必须输入9次\r\n CR-LF,并使用Select18,0放置光标;然而,你不能阻止他写错字。