如何使用 C# 将 TextBox 对象作为参数传递给方法
How to pass a TextBox Object as a parameter to a method using c#
我想将一个文本框对象传递给一个函数,然后该函数验证在 "KeyPress" 事件上处理的密钥。
我在一个名为 "common" 的 class 中创建了一个方法,就像这样
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);
您需要将 sender
从 Object
转换为 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;
}
现在根据需要处理 return 值:
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;
}
我想将一个文本框对象传递给一个函数,然后该函数验证在 "KeyPress" 事件上处理的密钥。
我在一个名为 "common" 的 class 中创建了一个方法,就像这样
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);
您需要将 sender
从 Object
转换为 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;
}
现在根据需要处理 return 值:
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;
}