Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CustomControl文本框验证事件和组合框_C# - Fatal编程技术网

C# CustomControl文本框验证事件和组合框

C# CustomControl文本框验证事件和组合框,c#,C#,我的CustomControl是用TextBox和ComboBox创建的。我想对这个控件使用验证事件。但如果我使用innerTextBox。验证这意味着这将适用于TetBox,这是正常的。但我不希望当我单击ComboBox时触发此事件,ComboBox也是此UserControl的一部分。我希望这个UC将成为一个整体。所以我可以点击文本框和组合框,因为它们是一体的,所以不会触发任何事件 innerTextBox是TextBox innereComboBox是ComboBox 这是我的验证代码事件

我的CustomControl是用TextBox和ComboBox创建的。我想对这个控件使用验证事件。但如果我使用innerTextBox。验证这意味着这将适用于TetBox,这是正常的。但我不希望当我单击ComboBox时触发此事件,ComboBox也是此UserControl的一部分。我希望这个UC将成为一个整体。所以我可以点击文本框和组合框,因为它们是一体的,所以不会触发任何事件

innerTextBox是TextBox

innereComboBox是ComboBox

这是我的验证代码事件。当我点击ComboBox时,事件将不会触发,该怎么办

public new event System.ComponentModel.CancelEventHandler Validating
        {
            add
            {
                innerTextBox.Validating += value;
            }

            remove { innerTextBox.Validating -= value; }
        }

希望您理解我的问题。

您是否尝试将combobox添加到验证事件中

public new event System.ComponentModel.CancelEventHandler Validating
{
    add
    {
        innerTextBox.Validating += value;
        innerComboBox.Validating += value;
    }

    remove 
    { 
        innerTextBox.Validating -= value; }
        innerComboBox.Validating -= value; }
    }
}

我想你必须自己做这件事。关闭内部控件的
CausesValidation
属性,使其不会触发,然后运行UserControl的验证代码:

public UserControl1() {
  InitializeComponent();
  innerTextBox.CausesValidation = false;
  innerComboBox.CausesValidation = false;
}
例如,此控件需要非空文本框和组合框中的选定项:

protected override void OnValidating(CancelEventArgs e) {
  if (innerTextBox.Text == string.Empty)
    e.Cancel = true;
  else if (innerComboBox.SelectedIndex == -1)
    e.Cancel = true;

  base.OnValidating(e);
}

我现在就尝试,但当我单击时验证事件仍会触发combobox@senzacionale:我不太明白你所说的“当我点击组合框时,该事件不会触发”是什么意思。你能更好地解释一下吗?文本框和组合框是CustomControl的一部分。我想对这个控件使用验证事件。但如果我使用innerTextBox。验证这意味着这将适用于TetBox,这是正常的。但我不希望当我单击ComboBox时触发此事件,ComboBox也是此UserControl的一部分。我希望这个UC将成为一个整体。所以我可以点击文本框和组合框,因为它们是一体的,所以不会触发任何事件。。。希望现在更好了