-1

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

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

如果我不清楚,我很抱歉。

4

1 回答 1

0

如果您的文本在 aTextBox或 a中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);
}

我假设文本看起来像这样

第一行文本。<CR><LF>
第二行文本。<CR><LF>
<缩进 30 个空格>
                      ^ 想要的位置

为了将光标设置在正确的位置,我们需要计算从文本开头开始的字符总数。由于您要将光标定位在第三行,因此这是第一行的长度加上它们末尾的两个 CR-LF(换行符)加上第三行开头的 30 个字符。如果第三行的长度小于 30 个字符,我们不能将光标放在那里,因此我们将它放在尽可能靠右的位置,即在这一行的最后一个字符上Math.Min(indent, bodyTextBox.Lines[2].Length);

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

于 2012-03-30T18:42:37.027 回答