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

本文关键字:参数传递 方法 对象 何使用 文本 | 更新日期: 2023-09-27 18:37:12

我想将一个文本框对象传递给一个函数,然后该函数验证了在"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;
}

然后当我想在按键事件中调用这个函数时,我会这样做

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);

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

您需要

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);

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

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;
}