2016-09-04 6 views
-2

私はC++ Builderの問題に取り組んでいます。私は会社のためのタスク管理ソフトウェアを作成する必要がありますが、私はいくつかの概念に問題があります。私の最初の問題はシンプルな問題ですが、エラーは表示されません。私のフォームで TStringGridとInsertキー

は、私が修正 TStringGridある TrStringGridを、持っている、と私は、ユーザーがキーボード上 挿入キーをクリックするたびに、新しい行が自動的に入力されていることを望みます。

アプリは2行でTStringGridで始まり、1行は固定されていて変更できず、2行目は空です。

これは、次のようになります。

Grid

ユーザーがキーを挿入押す初めて、私は2番目の行(灰色でない行が)に充填することにしたいです。ユーザーがキーを2回目以降に押すと、新しい行を追加して自動的に入力する必要があります。

私はそれを動作させることができません、私はそれが正しい方法でやっているかどうかわかりません。

//method called each time a key is pressed 
void __fastcall TForm1::rStringGridEd1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) 
{ 
    int counter = 1; 
    switch(Key) 
    { 
     case VK_INSERT: //VK_INSERT for the insert button 
      if(counter < 2) 
      { 
       for (int i = 0;i< rStringGridEd1->RowCount; i++) { 
        rStringGridEd1->Cells[0][i] = "a"; 
        rStringGridEd1->Cells[1][i] = "b"; 
        rStringGridEd1->Cells[2][i] = "c"; 
        rStringGridEd1->Cells[3][i] = "d"; 
        rStringGridEd1->Cells[4][i] = "e"; 
        counter++; 
       } 
      } 
      if(counter >= 2){ 
       for (int i = 0;i< rStringGridEd1->RowCount; i++) { 
        rStringGridEd1->RowCount++; // this is used to add a row 
        rStringGridEd1->Cells[0][i] = "a"; 
        rStringGridEd1->Cells[1][i] = "b"; 
        rStringGridEd1->Cells[2][i] = "c"; 
        rStringGridEd1->Cells[3][i] = "d"; 
        rStringGridEd1->Cells[4][i] = "e"; 
        counter++; 
       } 
      } 
     } 
    } 
+1

あなたの問題とは関係ありませんが、 'calulatenewdate'関数では変数' tmp'は必要ありません。 'data'を値渡しするので、すべての変更は関数内のローカル変数で行われます。 –

+2

こんにちは、これらの3つの問題を3つの問題に分割することをお勧めします。 – Stefan

+0

私はそれをやるだろう、私はそれがより簡単だろうと思った – Lazarius

答えて

0

コードにはいくつかの問題があります。行カウンタにローカル変数を使用する。あなたがいないときにループを使用する。 RowCountプロパティを正しくインクリメントしないでください。

int counter = 0; 

void __fastcall TForm1::rStringGridEd1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) 
{ 
    if (Key == VK_INSERT) 
    { 
     if (counter > 0) 
      rStringGridEd1->RowCount = rStringGridEd1->RowCount + 1; 

     int row = rStringGridEd1->FixedRows + counter; 

     rStringGridEd1->Cells[0][row] = "a"; 
     rStringGridEd1->Cells[1][row] = "b"; 
     rStringGridEd1->Cells[2][row] = "c"; 
     rStringGridEd1->Cells[3][row] = "d"; 
     rStringGridEd1->Cells[4][row] = "e"; 

     ++counter; 
    } 
} 

は個人的に、私は非常に多くのTStringGridが好きではない:

この代わりのようにもっと何かを試してみてください。それは扱いにくい、困難であり、メモリを非効率的に管理する。代わりに、vsReportモードで、通常は仮想モードでTListViewを使用することをお勧めします。あなたは同じことをやってみるかもしれません。

関連する問題