如何使用c#将TextBox对象作为参数传递给方法

时间:2015-01-11 22:57:01

标签: c# methods textbox telerik

我想将一个文本框对象传递给一个函数,然后该函数验证在“KeyPress”事件中处理的密钥。

我在类似“common”的类中创建了一个方法,就像这个

public void PreventInput(Telerik.WinControls.UI.RadTextBox tb, KeyPressEventArgs e, bool isDouble = true)
{

    string input = tb.Text;

    if (isDouble)
    {
        if ((Char.IsDigit(e.KeyChar))
            || (Char.IsControl(e.KeyChar))
            || ((e.KeyChar == '.') && (input.Contains(".") == false))
        )
        {
            return;
        }
    }
    else
    {

        if ((Char.IsDigit(e.KeyChar))
            || (Char.IsControl(e.KeyChar))
        )
        {
            return;
        }

    }

    e.Handled = true;
}

然后当我想在keyPress事件中调用此函数时,我这样做

private void InputUnitPrice_KeyPress(object sender, KeyPressEventArgs e)
{
    Common.PreventInput(sender, e, true);

}

但由于某种原因,调用此方法会给我一个错误。

cannot convert from 'object' to 'Telerik.WinControls.UI.RadTextBox

RM.Common.PreventInput(Telerik.WinControls.UI.RadTextBox, System.Windows.Forms.KeyPressEventArgs, bool)' has some invalid arguments

这段代码没有任何问题但是我试图避免每次我想要将输入限制为仅限数字时重复编写代码

private void InputUnitPrice_KeyPress(object sender, KeyPressEventArgs e)
{

    string input = (sender as Telerik.WinControls.UI.RadTextBox).Text;

    if ((Char.IsDigit(e.KeyChar))
        || (Char.IsControl(e.KeyChar))
        || ((e.KeyChar == '.') && (input.Contains(".") == false))
    ){
        return;
    }

    e.Handled = true;
}

问题是如何在没有错误的情况下使PreventInput方法正常工作。

被修改

根据下面的反馈,我尝试了以下(但仍然无效)

    public bool PreventInput(string input, KeyPressEventArgs e, bool isDouble = true)
    {

        if (isDouble)
        {
            if ((Char.IsDigit(e.KeyChar))
                || (Char.IsControl(e.KeyChar))
                || ((e.KeyChar == '.') && (input.Contains(".") == false))
            )
            {
                return false;
            }
        }
        else
        {

            if ((Char.IsDigit(e.KeyChar))
                || (Char.IsControl(e.KeyChar))
            )
            {
                return false;
            }

        }

        return true;
    }

我称之为

e.Handled = Common.PreventInput((sender as Telerik.WinControls.UI.RadTextBox).Text, e, true);

2 个答案:

答案 0 :(得分:2)

您需要将senderObject投射到RadTextBox

var txt = (Telerik.WinControls.UI.RadTextBox) sender;
Common.PreventInput(txt, e, true);

但是为什么要传递控件而不仅仅是文本?该方法应验证输入并将操作留给其调用者。在这种情况下,它是可重复使用的,并不依赖于任何控制。

所以你可以这样写:

public bool ValidateInput(string input, bool isDouble = true)
{
    bool isValid;
    //  insert your logic here ...
    return isValid;
}

现在根据需要处理返回值:

var txt = (Telerik.WinControls.UI.RadTextBox) sender;
e.Handled = Common.ValidateInput(txt.Text, true);

答案 1 :(得分:0)

首先将对象转换为文本框:

Common.PreventInput(sender as Telerik.WinControls.UI.RadTextBox, e, true);

你的逻辑也可以稍微简化一下:

public void PreventInput(Telerik.WinControls.UI.RadTextBox tb, 
    KeyPressEventArgs e, bool isDouble = true)
{
    string input = tb.Text ?? string.Empty;

    if (Char.IsDigit(e.KeyChar) || Char.IsControl(e.KeyChar))
    {
        return;
    }

    if (isDouble && e.KeyChar == '.' && !input.Contains("."))
    {
        return;
    }

    e.Handled = true;
}