如何使用c#强制控制在winforms中激活离开事件?

时间:2011-01-17 17:23:10

标签: c# winforms

我正在粘贴textbox1.text中的文本,我需要textbox1自行触发其离开事件。

目前我正在使用以下代码。但如果有人能建议我优雅或更好的方式,我将不胜感激: -

private void event()
{
  textbox1.Text = SearchedText;
  textbox1.Focus(); 
  textbox2.Focus();
}

首先我粘贴文本,然后在控件上设置Focus,然后再次在第二个控件上设置焦点。它正在解雇textbox1的假事件,但更好的是什么呢?

3 个答案:

答案 0 :(得分:4)

只需直接调用代码,无需等待事件:

    private void textBox1_Leave(object sender, EventArgs e) {
        mumble();
    }
    private void someEvent() {
        textBox1.Text = SearchedText;
        mumble();
    }
    void mumble() {
        // etc...
    }

只需调用textBox1_Leave(this,EventArgs.Empty)也可以正常工作。

答案 1 :(得分:3)

您应该处理TextChangedValidated个事件,而不是Leave个事件。

答案 2 :(得分:0)

为了强制离开,验证事件等,无论如何,我找到了一个可行的解决方案。

首先我尝试过:

      ProcessTabStop(true); 
      ProcessTabStop(false);

而不是:

      textbox1.Focus(); 
      textbox2.Focus();

文本框1和2的问题Focus()是它唯一需要激活的“离开”,“验证”等活动组件,而不是其他控件,此外,如果表单是动态的,作为程序员,您不一定具有任何想法,您要离开什么控件,这就是为什么我将Control.Focus()方法更改为上面的ProcessTabStop方法的原因。然后的问题是,如果只有一个控件具有TabStop true,则没有控件可以往返。因此不会触发事件。

下一个问题是,我不必用鼠标关闭表单,因此焦点不会改变,我使用键(Ctrl + Enter)接受表单,然后在不触发离开,验证等功能时我发送“关闭表格”,因为“关闭表格”记录了天气是否发生变化。但是,值是在“文本框上的离开”中设置的,因此无论我做什么,我都必须找到一种有效的解决方案。我几乎放弃了,实际上我已经填写了一份问题报告,当我想的时候,如果我将ActiveControl设置为Null,然后将其设置为Control,该怎么办。它可以正常工作,但是由于“父面板”上的颜色变化(取决于活动或不活动),因此出现了“闪烁”。

在所有情况下均有效的“解决方法”是:

        Control Old = ActiveControl;
        // ActiveControl.SuspendLayout();
        // ActiveControl.FindForm().SuspendLayout();
        ActiveControl = null;
        ActiveControl = Old;
        // ActiveControl.FindForm().ResumeLayout();
        // ActiveControl.ResumeLayout();

无论表单控件和TabStopped控件的数量如何,这似乎都会引发请假,验证等事件。您可能需要在ActiveControl或Form上使用SuspendLayout。 “活动” /“不活动”时,“我的控件”(父面板)会更改颜色,如果我不暂停“窗体”上的布局,则父面板会获得不必要的“闪烁”效果。

看着解决方案,这很明显,现在我找到了,但是花了我半天的时间去尝试解决一个或另一个但不是全部问题的不同方法。

我知道这是一个非常古老的话题,但是我发现的有关强迫解雇事件被解雇的文章很少。