winforms 在C#中使用字符串数组优化定时器循环

wko9yo5t  于 2023-10-23  发布在  C#
关注(0)|答案(1)|浏览(168)

Preface我正在使用Visual Studio Community 2022。我正在尝试制作一个简单的c# windows窗体应用程序来学习c#。我对编程逻辑并不陌生,但我是个C#新手。这是我的第一个问题。
我在做什么表单中有几个文本框,我正在将这些文本框的字符串内容放入字符串数组中。然后一个按钮启用一个使用该数组的计时器。目前,由于我找不到更好的方法来做这件事,这就是它的工作方式(它确实工作):

private string[] xxx()
{
    string[] yyy = { textbox1.Text, textbox2.Text, etc. };
    return yyy;
}

private void Timer_Tick(object sender, EventArgs e)
{
    string[] zzz = xxx();
    // use zzz below
}

当计时器被启用时,文本框不能被编辑,所以yyy数组在这段时间内不能改变(我在计时器开始时禁用文本框-直到它停止)。我不知道这是不是最好的方法,但是在Timer中重复使用另一个函数,而不是在Timer中定义一次并使用的简单数组变量,感觉有点奇怪。这段代码是否足够优化,或者是否有更好的方法?

    • 假设代码是未优化的,因为它每次计时器滴答时都会从文本框中获取值。所以我想做的(或者说我认为会更优化的)是从文本框中获取值到一个数组中,并在计时器中使用该数组。简而言之:

而不是这样:

  • 计时器滴答声:获取文本框中的所有值到一个数组中-使用该数组
  • 计时器滴答声:获取文本框中的所有值到一个数组中-使用该数组
  • 计时器滴答声:获取文本框中的所有值到一个数组中-使用该数组

我正在努力做到这一点:

  • 获取文本框中的所有值到数组中
  • 计时器滴答声:使用数组
  • 计时器滴答声:使用数组
  • 计时器滴答声:使用数组
3ks5zfa0

3ks5zfa01#

您可以将TextBox本身放入数组,而不是将TextBox的Text放入数组。由于TextBox是类,因此是引用类型,因此这个数组将存储对这些TextBox的引用,您将能够检索(或设置)实际的Text值。

private TextBox[] _textBoxes;

// Form Constructor
public Form1()
{
    InitializeComponent();
    _textBoxes = new[] { textbox1, textbox2, etc. };

    // Or, starting with C# 12
    _textBoxes = [ textbox1, textbox2, etc. ];
}

private void Timer_Tick(object sender, EventArgs e)
{
   Use _textBoxes[i].Text;
}

请注意,您必须在调用**InitializeComponent之后初始化数组**,因为这是创建Form控件的方法。

相关问题