自定义控件通用

时间:2009-11-30 10:54:34

标签: c#

我有一个自定义控件,其中包含某些字段(文本字段)和一个按钮,此控件可以通过各种其他形式访问。

此用户控件还包含单击该按钮的按钮,具体取决于输入的字段,我需要进行一些操作。现在,由于这个用户控件被用于许多地方我不希望其他人实际找到控件而是以更通用的方式做某事。

例如:

MyCustom控件包含两个字段 名称,姓氏和按钮搜索,但它绑定的网格在另一个Personform

在另一种形式中,我使用myCustomecontrol来做某事 。 任何人都可以建议如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以在控件上公开事件,并让事件包含您控件中的相关信息。

此课程适合包含您的活动信息:

public class MyControlSearchEventArgs : EventArgs
{
    public MyControlSearchEventArgs(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }

    public string FirstName { get; private set; }
    public string LastName { get; private set; }
}

然后将此代码添加到现有的自定义控件类中:

    public event EventHandler<MyControlSearchEventArgs> SearchClick;

    protected override void OnSearchClick(MyControlSearchEventArgs eventArgs)
    {
        EventHandler<MyControlSearchEventArgs> searchClick = SearchClick;

        if(searchClick != null)
            searchClick(this, eventArgs);
    }

现在,在搜索按钮的点击事件处理程序中,您可以像这样举起事件:

protected void searchButton_Click(object sender, EventArgs e)
{
    OnSearchClick(new MyControlSearchEventArgs(
        firstNameTextBox.Text, 
        lastNameTextBox.Text
        );
}

控件的使用者现在可以收听控件公开的SearchClick事件,让您可以独立于控件执行任何操作。

修改

此外,如果要在事件处理程序之外获取两个文本框的值,可以将它们公开为控件上的公共属性:

public string FirstName
{
    get { return firstNameTextBox.Text; }
    set { firstNameTextBox.Text = value; }
}

public string LastName
{
   get { return lastNameTextBox.Text; }
   set { lastNameTextBox.Text = value; }
}

然后,您可以获取或设置这些值,就像任何普通控件一样。

SearchControl control = (SearchControl)Page.FindControl("searchControl");
control.FirstName = "Programming";
control.LastName = "Hero";