更改焦点时显示Mulitline TextBox的起始文本

时间:2016-01-14 11:02:25

标签: c# .net winforms textbox

我正在创建一个包含多行 TextBox的表单来输入网址。预期的网址会很长。 用户将粘贴URL并移至下一个框。

现在,TextBox会在用户移至下一个TextBox时显示网址的结尾部分。我希望它能显示URL(域名)的起始而不是尾随部分。

电流:

Current behaviour

预期:

Expected behaviour

这应该在用户离开TextBox时发生。

我在Selection事件中尝试了textBox_Leave()的各种方法,但我想,如果失去焦点,这些方法将无效。

我正在使用.Net framework 3.5。

更新:我使用的文本框是Multiline。如果Mutliline属性设置为False,@ S.Akbari和@Szer建议的答案是完美的。我意识到,Multiline将发挥如此重要的作用。因此更新问题!

3 个答案:

答案 0 :(得分:2)

Leave事件中使用SelectionStart应该有效:

private void textBox1_Leave(object sender, EventArgs e)
{
     textBox1.SelectionStart = 0;
}

在:

enter image description here

离开TextBox后:

enter image description here

答案 1 :(得分:2)

尝试过它并且有效。 Proof

public Form1()
{
    InitializeComponent();

    textBox1.LostFocus += TextBox1_LostFocus;
}

private void TextBox1_LostFocus(object sender, EventArgs e)
{
    textBox1.SelectionStart = 0;
    textBox1.SelectionLength = 0;
}

答案 2 :(得分:1)

我可以看到它如何处理Multiline属性设置为true。

一个简单的API调用可以使这个工作:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);

private const int WM_VSCROLL = 0x115;
private const int SB_TOP = 6;

void textBox1_Leave(object sender, EventArgs e) {
  SendMessage(textBox1.Handle, WM_VSCROLL, (IntPtr)SB_TOP, IntPtr.Zero);
}