2012-02-15 4 views
1

のグローバル整数を宣言し、私はこのコードはWinフォーム

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (checkBox1.Checked == true) 
     { 
      i = 15 - textBox1.Text.Length; 
      timer1.Enabled = true; 
      timer1.Start(); 
     } 
     else 
     { 
      timer1.Enabled = false; 
     } 
    } 
    private int i = 15 - textBox1.Text.Length; //this wont work but i need it to 
    private int y = 15 - textBox1.Text.Length; //this wont work either but i also need it to 
    private void timer1_Tick(object sender, EventArgs e) 
    { 

     if (i <= 11) 
     { 
      i++; 
      string ping = new string(' ', i) + textBox1.Text; 
      label1.Text = ping; 
      if (i == 10) 
      { 
       y = 11; 
      } 
     } 
     else if (y > 0) 
     { 
      y--; 
      string pong = new string(' ', y) + textBox1.Text; 
      label1.Text = pong; 
      if (y == 0) 
      { 
       i = 0; 
      } 
     } 
    } 

のグローバル整数としてint型

private int i = 15 - textBox1.Text.Length; 

を宣言しようとしていますが、私はエラー

フィールド初期化子ができません取得します非静的フィールド、メソッド、またはプロパティを参照してください 'text_test.Form1.textBox1'

ヘルプ?その後、その後

+0

、あなたは 'TextBox'、' checkbox'で、と 'Label'を持っていて、チェックボックスをチェックするとき:TextChangedイベント「テキストボックスのイベントハンドラを追加します。 'Timer'がラベルのテキストをアニメートするようにします。これまでのところ私はそうですか?チェックボックスをオンにしているときに、ユーザーがテキストボックス内の値を編集したときに、何が起こりたいのですか? –

答えて

3

を行います方法 - 変数名は説明的でなければなりません!)。

ワークフローのある時点でiの値を設定する必要があります。コンテキストがなくても、おそらくOnTextChangeというイベントなどがあると思います。

+0

問題は私がタイマーでそれを使用する必要があるために私が望むことをすることができる前にテキストの長さを取得する必要があります、そして、timer_tickの内部にそれを宣言すればそれはそれをねじ込みます –

+0

@IanLundberg私は新しいより完全なコードで質問してください。あなたが望むものを達成するためには、おそらくより適切な方法がありますが、コードを見ずに誰かを正しい方向に向けることができないと思います。 –

+0

ok私はそれを行うでしょう –

2
private int i; 

(コンストラクタ関数か何かで)あなたはで、悪い変数名で変数i(の初期値を設定しようとしている

i = textBox1.Text.Length; 
1

コードの実行順序を理解することが重要です。フィールドの宣言をコードの中に入れます。の後にの初期化が行われることを期待して、checkBox1_CheckedChanged()メソッドが実行されます。しかし、いいえ、フィールドはの前にの前に初期化され、クラスのコンストラクタが実行されます。

これは決して良い結果に終わらない可能性があります。 textBox1オブジェクトはまだ存在せず、InitializeComponent()メソッドのコンストラクタによって作成されます。長さはまだありませんが、ユーザが何かを入力したときにになるまでは、までは発生しません。コンパイラのエラーはあなたを困らせないようにします。

コードが何をしようとしているかわかりません。しかし、i変数を何かで初期化する必要があると仮定すると、ユーザーがテキストボックスに何かを入力したときに変数を初期化する必要があります。 Text.Lengthプロパティが変更されます。フォーム上

私が言うことができるものから、
private void textBox1_TextChanged(object sender, EventArgs e) { 
     if (textBox1.Text.Length <= 15) { 
      i = 15 - textBox1.Text.Length; 
     } 
    } 
+0

それは私がタイマーでそれを使用しても私は同じにとどまるの価値を作るだろうか?それは私が必要とするすべてです。私は15 = textbox1.text.lengthをグローバルにする方法はありますか?私はタイマーでそれを使用することができる必要がありますint i = 15 - textbox1.text.lengthそれはそれがそれをちょうどそれが値を設定するたびに、 –

関連する問題