在 C# 中引用表单对象以避免重复代码块
Reference form objects in C# to avoid repeating code blocks
我试过搜索这个,但我的问题可能是我不知道描述问题的正确术语。
我有一个 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 );
引用文本框对象以便将它们传递给函数并像上面的伪代码那样使用的正确方法是什么?
您正在将 TextBox
类型的变量作为 object
传递给该方法,您没有传递实际类型。我想,这里是 TextBox
。如果不传递实际类型,则无法操作该类型的属性。您只会看到并处理该类型,就好像它是您用来传递参数的类型,这里是 Object
因为 TextBox 派生自基础 class Object
。你可以看看 Object
class 成员。你在那里看不到 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;
}
我想用一些笔记来结束:
首先你不能传递一个字符串值给
System.Threading.Thread.Sleep
。你应该做一些叫做
casting
或 type conversion
。您可以搜索这些术语。到
做到这一点,C#
为您提供帮手 class Convert。您可以使用辅助方法 ToInt32
将 TextBox
中的值转换为 Int32
值类型。
如果要实现“等待”或“延迟”效果,请在 UI
应用程序或 UI-Thread
上下文中。我建议您改用 Task.Delay
,返回的延迟任务 await
,并用 async
修饰符标记您的方法。这叫做Asynchronous Programming
我试过搜索这个,但我的问题可能是我不知道描述问题的正确术语。
我有一个 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 );
引用文本框对象以便将它们传递给函数并像上面的伪代码那样使用的正确方法是什么?
您正在将 TextBox
类型的变量作为 object
传递给该方法,您没有传递实际类型。我想,这里是 TextBox
。如果不传递实际类型,则无法操作该类型的属性。您只会看到并处理该类型,就好像它是您用来传递参数的类型,这里是 Object
因为 TextBox 派生自基础 class Object
。你可以看看 Object
class 成员。你在那里看不到 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;
}
我想用一些笔记来结束:
首先你不能传递一个字符串值给
System.Threading.Thread.Sleep
。你应该做一些叫做casting
或type conversion
。您可以搜索这些术语。到 做到这一点,C#
为您提供帮手 class Convert。您可以使用辅助方法ToInt32
将TextBox
中的值转换为Int32
值类型。如果要实现“等待”或“延迟”效果,请在
UI
应用程序或UI-Thread
上下文中。我建议您改用Task.Delay
,返回的延迟任务await
,并用async
修饰符标记您的方法。这叫做Asynchronous Programming