我可能是Google搜索或搜索错误的任务(或者不可能)。有没有办法传递控件,如文本框和更改多个属性。例如,将myTextOne传递给方法并将其设置为多行,红色文本等
我尝试对文本框使用类方法,我可以在其中调用一个可以同时操作多个属性的方法,然后在文本框中调用该方法:
private TextBox pText;
public TextBox PText
{
get { return pText; }
set { pText= value; }
}
public static UpdateProperties()
{
pText.Multiline= true;
pText.BackColor = Color.White;
//3RD property
}
/// Calling it:
myTextOne = MyClass.UpdateProperties()
一般情况下,逐行更改属性,但如果有重复的可能性,只需一个方法或其他函数来更新多个属性就会节省更多时间,特别是如果可能< / em>用于其他人。
感谢。
答案 0 :(得分:2)
是;你只需要提供适当类型的参数。例如:
static void UpdateProperties(System.Windows.Forms.Controls.TextBox textbox)
{
textBox.BackColor = Color.White;
textBox.MultiLine = true;
}
然后,在你的主程序中
MyClass.UpdateProperties(PText);
您还可以将参数定义为Control
,它允许您传递任何控件,而不仅仅是文本框。但是,该函数只能设置所有控件中常见的属性(例如Text
)。
static void UpdateText(System.Windows.Forms.Controls.Control control)
{
control.Text = "Test";
}
//Main program
MyClass.UpdateText(PControl);
您还可以使用extension method语法,如下所示:
namespace MyExtensionMethodNamespace
{
public class MyExtensionMethodClass
{
static public void UpdateProperties(this System.Windows.Forms.Controls.TextBox textbox)
{
textBox.BackColor = Color.White;
textBox.MultiLine = true;
}
static public void UpdateText(this System.Windows.Forms.Controls.Control control)
{
control.Text = "Test";
}
}
}
//Main program
using MyExtensionMethodNamespace;
this.PTextBox.UpdateProperties();
this.PTextBox.UpdateText();
如果您编写扩展方法以便它返回this
,您可以使用流畅的语法,如下所示:
namespace MyExtensionMethodNamespace
{
public class MyExtensionMethodClass
{
static public TextBox UpdateProperties(this TextBox textbox)
{
textBox.BackColor = Color.White;
textBox.MultiLine = true;
return textBox;
}
static public Control UpdateText(this Control control)
{
control.Text = "Test";
return control;
}
}
}
//Main program
using MyExtensionMethodNamespace;
this.PTextBox.UpdateProperties().UpdateText();
此解决方案很不错,因为您可以在一行中完成所有更新。
一旦弄清楚如何执行上述操作,您可以将其修改为一次使用多个控件,如下所示:
namespace MyExtensionMethodNamespace
{
public class MyExtensionMethodClass
{
static public IEnumerable<TextBox> UpdateProperties(this IEnumerable<TextBox> textboxes)
{
foreach( var textBox in textBoxes)
{
textBox.BackColor = Color.White;
textBox.MultiLine = true;
}
return textBoxes;
}
static public IEnumerable<Control> UpdateText(this IEnumerable<Control> controls)
{
foreach ( var control in controls)
{
control.Text = "Test";
}
return controls;
}
}
}
//Main program
using MyExtensionMethodNamespace;
//Update three specific controls
new [] {myControl1, myControl2, myControl3}.UpdateProperties().UpdateText();
//Update all controls on the form
this.Controls.UpdateProperties().UpdateText();
//Update all TextBox controls on the form
this.Controls.OfType<TextBox>.UpdateProperties().UpdateText();
如果您经常发现自己一次更新多个控件,这会很有帮助。
当然,您总是可以使用LINQ并传递委托。
using System.Linq;
//Set three specific controls
new[]{myControl1, myControl2, myControl2}.ToList().ForEach(a => {a.Text = "Test"; a.BackColor = Color.Red; a.MultiLine = true});
//Set all controls
this.Controls.ToList().ForEach(a => {a.Text = "Test"; a.BackColor = Color.Red; a.MultiLine = true});
//Set all TextBox controls
this.Controls.OfType<TextBox>.ToList().ForEach(a => {a.Text = "Test"; a.BackColor = Color.Red; a.MultiLine = true});
这个解决方案很不错,因为你根本不需要编写任何辅助函数。