无法将计时器转换为文本框数组| Winform的

时间:2017-08-15 21:33:10

标签: winforms visual-studio c++-cli

我正在尝试实现一个每10毫秒运行一次的计时器,以确定用户是否填写了一个字段。基本上,如果填充了一个文本框(最多10个),则会启用一个按钮。如果他们填写,然后删除输入,计时器将确定并禁用该按钮。这可以在以下内容中看到:

private: System::Void StartBtn_Tick(System::Object^  sender, System::EventArgs^  e) {
int count = 0;

array < TextBox ^ > ^ textbox = { vPeak1, vPeak2, vPeak3, vPeak4, vPeak5, vPeak6, vPeak7, vPeak8, vPeak9, vPeak10 };
TextBox ^ current = (TextBox ^)sender;

for (int i = 0; i < 10; i++) {
    if (textbox[i]->Text != L"") count++;
    else count--;
}

此代码适用于单个文本框,但是一旦我实现了文本框数组,程序就会立即崩溃,第4行会出现异常。“count”的值为0.

“'无法将'System.Windows.Forms.Timer'类型的对象强制转换为'System.Windows.Forms.TextBox'。'”

1 个答案:

答案 0 :(得分:0)

根据您发布的代码,

private: System::Void StartBtn_Tick(System::Object^  sender, System::EventArgs^  e)

看起来这是Timer的Tick处理程序。 sender是生成导致处理程序被调用的事件的对象,因此在这种情况下 sender将是Timer本身而不是TextBox。你不能将sender转换为TextBox,因为它不是TextBox,它是一个Timer。

但是,你仍然可以在不使用sender的情况下完成同样的事情,因为你永远不会使用它。

array < TextBox ^ > ^ textbox = { vPeak1, vPeak2, vPeak3, vPeak4, vPeak5, vPeak6, vPeak7, vPeak8, vPeak9, vPeak10 };
int count = 0;

for (int i = 0; i < 10; i++) {
    if (textbox[i]->Text != L"") count++;
}
// Test the final value of count here and do whatever you need