2017-10-28 8 views
-4

の反復回数をカウントするsmsを送信するために使用されるwinformアプリケーション。 smをバルクで送信するためにforループが使用されています。ユーザーがSENDボタンをクリックすると、ループが開始されます。 LABELを使用してユーザーに送信されたSMSの数を表示したいループが進行するにつれてループまたは反復回数を表示する方法はありますか? これに関するご提案はありますか? ありがとうございます! ループは次のようになります。 forループforループC#

for (int x = 0; x < DataGridView.Rows.Count; x++) 
     { 
      string number = ""; 
      number = (DataGridView.Rows[x].Cells["Number"].Value).ToString(); 
      message = MessageBodyRichTextBox.Text; 
      cls.ConnectGSM(Convert.ToInt16(p), number, message);    
     } 
+0

BackgroundTaskのドキュメントをご覧ください。その後、ループ内で「進捗状況を報告」し、進捗ハンドラ内のラベルを更新することができます。 –

+0

ループカウンタ変数を使用できないのはなぜですか?そして、適切な遅れを持ってラベルを表示しますか? –

+1

http://idownvotedbecau.se/noattempt/ – CalC

答えて

1

Aはカウンタを内蔵しています - 例えば:

for(int i=0; i <= maxValue; i++) 
{ 
    // do stuff 

    yourLabel.Text = i.ToString(); 
    yourLabel.Update(); 
} 

は、おそらくあなたは、foreachループ(foreach(var x in y))を参照しています。その場合 は、あなたがカウンターを自分で追加する必要があります。あなたが後でそれをアクセスできるように

var loopCounter = 0; 
foreach(var x in y) 
{ 
    // do stuff 

    yourLabel.Text = loopCounter.ToString(); 
    yourLabel.Update(); 
    loopCounter++; 
} 
+0

しかし、私の質問は、ループまたは反復回数に関して進捗を示す方法です。より簡単には、反復処理の数に従ってラベルが更新されるような方法で反復の数を表示するようにしてください。 – Omer

+0

私は自分の答えを編集しました。 –

+0

これは動作しますが、まだ問題があります。つまり、DataGridViewに4行あり、for(int x = 0; x Omer

0

、ループの外のインデックスを宣言します。

int i = 0; 
for (i = 0 ; i < smsCount ; i++) 
{ 
    //Send SMS 
} 
//You can access i here 

あなたは、foreachループ

int count = 0; 
foreach (SMS sms in SMSlist) 
{ 
    //Send SMS 
    count++; 
} 

を使用している場合は、両方のiをアクセスし、ループの外でカウントされます。他のメソッドやクラスからアクセスする必要がある場合は、それらをグローバルスコープで宣言することもできます。

0
var loopcounter=0; 
foreach(var x in y){ 
     loopcounter++; 
     label.text=loopcounter.toString();  
     //delay(); 
} 

これは進捗ハンドラまたは別のスレッドで記述する必要があります。ループの速度がラベルよりもはるかに速いため、テキストを表示することができます。したがって、遅延なしにこれを直接実行すると、必要な効果が得られない可能性があります。

OR

また、SMSを送信するの進捗状況を表示するためにProgress Barを使用することができます。

private void button1_Click(object sender, EventArgs e) 
     { 
      int i; 

      progressBar1.Minimum = 0; 
      progressBar1.Maximum = 200; 

      for (i = 0; i <= 200; i++) 
      { 
       progressBar1.Value = i; 
      } 

     }