using System;
using System.Windows.Forms;
namespace DIYWordpad
{
public partial class FormOffsetPosition : Form
{
#region 自定义对象
private RichTextBox richText;
private ToolTip toolTip;
#endregion
public FormOffsetPosition(RichTextBox rtb)
{
#region
InitializeComponent();
richText = rtb;
maskedText.ValidatingType = typeof(int);
maskedText.PromptChar = '0'; // 设置提示字符。
maskedText.HidePromptOnLeave = false; // 无焦点时,输入掩码中的提示字符保持显示。
maskedText.TextMaskFormat = MaskFormat.IncludePromptAndLiterals; // 返回用户输入的文本、掩码中定义的任意文本字符以及提示字符的任意实例。
#endregion
}
#region FormLoad
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
bool flag = Convert.ToBoolean(this.Tag);
labelLine.Visible = flag;
rbDn.Visible = rbUp.Visible = !flag;
if (flag)
{
int length = (richText.GetLineFromCharIndex(richText.TextLength) + 1).ToString().Length;
maskedText.Mask = string.Format("{0:D" + length + "}", 0);
}
else
rbUp.Checked = true;
}
#endregion
#region MaskedTextBox.Mask
private void radioButton_CheckedChanged(object sender, EventArgs e)
{
maskedText.Mask = sender.Equals(rbUp) ? "+00" : "-00";
maskedText.Focus();
maskedText.Select(1, 2);
}
private void maskedText_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
{
if (e.Position < maskedText.TextLength)
{
if (toolTip == null)
{
toolTip = new ToolTip();
toolTip.IsBalloon = true; // 使用气球状窗口。
toolTip.ToolTipIcon = ToolTipIcon.Warning;
toolTip.ToolTipTitle = "写字板";
}
toolTip.Show("请输入 0~9 数字!", maskedText, 3000);
}
}
#endregion
#region OKButton
private void btnOK_Click(object sender, EventArgs e)
{
int value = int.Parse(maskedText.Text);
if (Convert.ToBoolean(this.Tag))
{
if (value < 1)
goto End;
if ((value = richText.GetFirstCharIndexFromLine(value - 1)) > -1)
{
richText.SelectionLength = 0;
richText.SelectionStart = value;
richText.ScrollToCaret(); // 将控件的内容滚动到当前插入符号位置。
}
else
MessageBox.Show(this, "指定的行号超出控件中的行数范围。", "写字板", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
richText.SelectionCharOffset = value;
End:
{
maskedText.Focus();
maskedText.SelectAll();
}
}
#endregion
#region CancelButton
private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
#endregion
}
}