在C#中引用表单对象以避免重复代码块

时间:2018-03-24 13:17:55

标签: c# object-reference

我已经尝试过搜索,但我的问题可能是我不知道描述问题的正确术语。

我有一个C#表单,包含许多文本框对象。

在某些情况下,我按顺序处理每个文本框的内容,如下所示:

tbxStressCmd1.BackColor = Color.Salmon;
processCmd(tbxStressCmd1.Text);
System.Threading.Thread.Sleep( tbxStressWait1.text );
tbxStressCmd1.BackColor = Color.White;

tbxStressCmd2.BackColor = Color.Salmon;
processCmd(tbxStressCmd2.Text);
System.Threading.Thread.Sleep( tbxStressWait2.text );
tbxStressCmd1.BackColor = Color.White;
.
tbxStressCmd9.BackColor = Color.Salmon;
processCmd(tbxStressCmd9.Text);
System.Threading.Thread.Sleep( tbxStressWait9.text );
tbxStressCmd9.BackColor = Color.White;

我想避免重复,并有类似的东西:

// Pseudo Code
runCmd ( object tbxCmd, object tbxWait )
{
   tbxCmd.BackColor = Color.Salmon;
   processCmd(tbxCmd.Text);
   System.Threading.Thread.Sleep( tbxWait.text );
   tbxCmd.BackColor = Color.White;
}

然后:

runCmd( tbxStressCmd1, tbxStressWait1 );
.
.
runCmd( tbxStressCmd9, tbxStressWait9 );

引用文本框对象的正确方法是什么,以便它们可以传递给函数并在上面的伪代码中使用?

1 个答案:

答案 0 :(得分:6)

我真的不知道你在这做什么! 但是,您将TextBox类型的变量作为object传递给方法,您没有传递实际类型。我认为,这是TextBox类型。如果您未通过实际类型,则无法操纵该类型的属性。你会看到&处理类型,好像它是用于传递参数的类型,Object这里因为TextBox派生自基类Object 。您可以查看Object班级成员。你在那里看不到Text属性:)。 你可以这样做:

public void DoTheThing(TextBox txCmd, TextBox txWait){
    txCmd.BackColor = Color.Salmon;
    ProcessCmd(txCmd.Text);
    System.Threading.Thread.Sleep(txWait.Text)
    txCmd.BackColor = Color.White;
}

我想完成一些笔记:

  1. 首先,您无法传递字符串值 System.Threading.Thread.Sleep。你应该做一些叫做的事 castingtype converting。您可以搜索这些条款。至 这样做,C#为您提供帮助类Convert。您可以使用辅助方法ToInt32TextBox中的值转换为Int32值类型。

  2. 如果你想实现一个"等待"或者"延迟"效果,在UI应用程序或UI-Thread上下文中。我建议您改为使用Task.Delayawait返回的延迟任务,并使用async修饰符标记您的方法。这称为Asynchronous Programming