2017-08-15 11 views
0

私はフィールドがユーザーによって満たされているかどうかを判断するために10msごとに実行されるタイマーを実装しようとしています。基本的に、テキストボックス(最大10個)が塗りつぶされている場合、ボタンが有効になります。入力が完了したら、入力を削除すると、タイマーがそのボタンを決定して無効にします。それは次のように見ることができます。タイマーをテキストボックスの配列にキャストできません。 Winform

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.しかし、私はテキストボックスの配列を実装した後、プログラムはラインでの例外を除いて、すぐにクラッシュします0

「System.Windows.Forms.TextBox 『『『とタイプする』 System.Windows.Forms.Timer』タイプのオブジェクトをキャストすることができません』」あなたが投稿したコードによる

+0

このコードはどこに正確に実装されていますか?あなたは文脈からコードを投稿しました。 「送信者」はどこから来たのですか? –

+0

@KenWhiteもう少し文脈を追加しました。これは、TimerのTick動作で発生しています。送信者は、他の場所で使用されているテキストボックス内のテキストです。 –

+0

Timer's Tickハンドラで起こっている場合、 'sender'はTextBoxではなくTimerです。タイマーをTextBoxにキャストすることはできません。 'sender'は、イベントを生成したコードを呼び出す' Object'です。これは 'Timer'です。 –

答えて

0

を、

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

これはTimerのTickハンドラと思われます。 senderは、ハンドラを呼び出すイベントを生成したオブジェクトです。この場合、 senderは、Texter自体ではなく、TextBoxになります。 TextBoxではないので、senderをTextBoxにキャストすることはできません。それはタイマーです。

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 
関連する問題