我正在尝试实现一个每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'。'”
答案 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