在什么情况下可以更改winforms maskedtextbox中的插入符号

在什么情况下可以更改winforms maskedtextbox中的插入符号,winforms,Winforms,现在,我正在我的屏蔽文本框的按键事件中调用win32 createcaret/showcaret。这很好地改变了它。但是,我希望在输入框时通过制表符或单击来更改插入符号 不幸的是,enter事件甚至invalidate事件都不适合更改插入符号。这不会改变,可能是因为他们开火太早了 无论如何,我怎样才能让插入符号在文本框enter中更改,而不在enter事件中处理它呢?您也需要将插入符号添加到例程中: private void Form1_Load(object sender, EventArgs

现在,我正在我的屏蔽文本框的按键事件中调用win32 createcaret/showcaret。这很好地改变了它。但是,我希望在输入框时通过制表符或单击来更改插入符号

不幸的是,enter事件甚至invalidate事件都不适合更改插入符号。这不会改变,可能是因为他们开火太早了


无论如何,我怎样才能让插入符号在文本框enter中更改,而不在enter事件中处理它呢?

您也需要将插入符号添加到例程中:

private void Form1_Load(object sender, EventArgs e)
{
  textBox1.GotFocus += new EventHandler(textBox1_GotFocus);
  textBox1.LostFocus += new EventHandler(textBox1_LostFocus);
}

private void textBox1_GotFocus(object sender, EventArgs e)
{
  CreateCaret(textBox1.Handle, IntPtr.Zero, 6, textBox1.Height);
  ShowCaret(textBox1.Handle);
}

private void textBox1_LostFocus(object sender, EventArgs e)
{
  DestroyCaret();
}

您还需要在日常生活中添加插入符号:

private void Form1_Load(object sender, EventArgs e)
{
  textBox1.GotFocus += new EventHandler(textBox1_GotFocus);
  textBox1.LostFocus += new EventHandler(textBox1_LostFocus);
}

private void textBox1_GotFocus(object sender, EventArgs e)
{
  CreateCaret(textBox1.Handle, IntPtr.Zero, 6, textBox1.Height);
  ShowCaret(textBox1.Handle);
}

private void textBox1_LostFocus(object sender, EventArgs e)
{
  DestroyCaret();
}

GotFocus事件是一个明确的事件。它隐藏在设计器中,您仍然可以通过在代码中指定事件处理程序来使用它。谢谢Hans,这非常有效。我可以问你我应该参加什么活动吗?我现在正在使用leave,不确定它是否正确。GotFocus事件是一个明确的事件。它隐藏在设计器中,您仍然可以通过在代码中指定事件处理程序来使用它。谢谢Hans,这非常有效。我可以问你我应该参加什么活动吗?我现在正在使用leave,不确定它是否正确。我今天遇到了某种堆栈损坏错误。这可能是因为未被破坏的插入符号吗?可能很难理解,但我只使用.net,并且假设我不必担心内存问题。我几乎没有win32方面的经验。@IsaacB哦,这是个错误的假设,因为当你开始使用API调用时,你正在冒险使用非托管代码,这意味着管理这些资源是你的工作。我今天遇到了某种堆栈损坏错误。这可能是因为未被破坏的插入符号吗?可能很难理解,但我只使用.net,并且假设我不必担心内存问题。我几乎没有win32的使用经验。@IsaacB哦,这是个错误的假设,因为当你开始使用API调用时,你正在冒险使用非托管代码,这意味着管理这些资源是你的工作。