2011-02-04 3 views
8

Utilizzo l'applicazione Windows Form C# 2008.Come posso aumentare automaticamente i numeri in C#?

Nel mio progetto c'è un controllo TextBox e in quello voglio fare un auto generare numeri per campioni s00, poi quando torno a formarlo di nuovo dovrebbe essere incrementato come s01, s02, s03 ...... Mi piace che

Please help me

risposta

7

Abbastanza facile. Mantieni una variabile per mantenere il numero corrente.

int incNumber = 0; 

Poi il clic del tasto, generare la stringa di numero come questo:

string nyNumber = "s" + incNumber.ToString("00"); 
incNumber++; 
+2

Penso che sia comunque necessario incrementare il numero. ;) –

+0

'incNumber ++;'? – Prisoner

4

Fate come suggerito da Øyvind Knobloch-Bråthen ma se si vuole che sia fatto automaticamente quando forma è Disattivato e Attivato (Si ritorna al modulo e lo si concentra) quindi si può fare qualcosa del genere.

Questo funziona solo se si è sicuri che il testo nella scatola sarà sempre nel formato indicato

this.Activated += (s, ev)=>{ 
     string tmp = textbox1.Text; 
     int num = String.Substring(1) as int;    
     if(nuum != null) 
     { 
      num++; 
      textbox1.Text = "s" + num.Tostring(); 
     } 
     }; 
2

Proprio come ha detto Øyvind Knobloch-Bråthen: Tenere traccia del numero intero utilizzando una variabile. Solo è necessario formattarla in questo modo (Microsoft preferito):

int incNumber = 0; 

string formattedIncNumber = String.Format("s{0:D2}", incNumber); 
incNumber++; 

O se si vuole farlo con una linea meno codice:

int incNumber = 0; 

string formattedIncNumber = String.Format("s{0:D2}", incNumber++); 

Vedi MSDN per un riferimento completo per la formattazione interi.

2

Un leggermente migliore variante di sopra Oyvind-Knobloch-Brathen:

int incNumber=0; 
s + String.Format("{0:00}", incNumber); 
incNumber++; 

// S00, S01, S02. Se si desidera, ad esempio, la gamma 0001-9999, basta cambiare "00" a "0000", ecc

0

Prova questo per la generazione automatica del numero e auto Incremento del numero:

// Stock is table name 
// metal id is unique number that is auto generated as well as auto incremented 


private void textBox9_TextChanged(object sender, EventArgs e) 
{ 
    string s = "select max(metalid)+1 from stock"; 
    SqlCommand csm = new SqlCommand(s, con); 

    con.Open(); 
    csm.ExecuteNonQuery(); 

    SqlDataReader dd = csm.ExecuteReader(); 

    while (dd.Read()) 
    { 
     int n = dd.GetInt32(0); 
     textBox1.Text = n.ToString(); 
    } 

    con.Close(); 
} 
+0

L'OP non ha a che fare con i database. – Neolisk

0

altro singolo approccio linea sarebbe:

string sampleNum = "s" + (counter++).ToString("00"); 

Dove contatore definisce in questo modo:

int counter= 0; 
1

Se il componente testo della stringa è sconosciuto (con o senza un numero alla fine della stringa), variazioni di questa funzione possono essere utili:

 private string increment_number_at_end_of_string(string text_with_number_at_the_end) 
     { 
      string text_without_number = text_with_number_at_the_end.TrimEnd('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'); 
      string just_the_number = text_with_number_at_the_end.Substring(text_without_number.Length); 

      int number = -1; 
      if (int.TryParse(just_the_number, out number)) 
      { 
       return text_without_number + (number + 1).ToString(); 
      } 
      return text_with_number_at_the_end; 
     }
-2
{ try { //madhura// SqlCommand cmd1 = new SqlCommand(@"select 'Column_name'+ REPLACE(STR(MAX(CAST(Right(Column_name,5) as int)+1),6),SPACE(1),'0') as Column_name from TabelName ", con); SqlDataAdapter da = new SqlDataAdapter(cmd1); DataTable dt = new DataTable(); da.Fill(dt); 

se (dt.Rows [0 ] ["Column_name '"]. ToString() == null) {Label1.Text = "DMBP-000001"; } else {Label.Text = dt.Rows [0] ["Column_name '"].Accordare(); }} catch {}}

+2

Che cosa ha a che fare con la domanda? –