TStringGridがあり、選択した行を削除したいとします。私が試した基本的なことは、最後の行だけを削除してみました。任意の行を削除するにはどうすればよいですか?TStringGrid行を削除するにはどうすればよいですか?
答えて
:TCustomGrid
の任意の子孫は、自動的にあなただけの他のグリッド・メソッドのように呼び出すことができますDelRow
方法を、持っていますRowCount
プロパティ。実際には、常に行のリストの末尾のに変更が加えられます。そのことを念頭に置いて、不要な行が末尾にあることを保証するコードを作成し、、次に最後の行を削除します。 (だけではなくcall DeleteRow
あなたがが、保護されたメソッドを呼び出したい場合は、あなたにもことがあります。最も直接的な方法は移動に行となり、そしてそこMoveRow
方法だが、それが保護されます。)
唯一の公共使い方公開されているメンバであれば、任意の行を削除するループを書くことができます。
procedure DeleteRow(Grid: TStringGrid; ARow: Integer);
var
i: Integer;
begin
for i := ARow to Grid.RowCount - 2 do
Grid.Rows[i].Assign(Grid.Rows[i + 1]);
Grid.RowCount := Grid.RowCount - 1;
end;
それをコピーし、各行の内容あなたが上の行に削除したい以下1:たとえば、ここにScalabium Software's FAQ on this topicに触発されたいくつかのコードです。ループの最後に、削除したい行が(そのすぐ下の行で)上書きされ、最後の行が2つコピーされます。次に、最後の行を単に削除します。あなたは(動的代わりに、セルの内容の対象から細胞内のデータを描画する私のような、)オブジェクトのみを必要とする場合は、追加するには
DeleteRow(Grid, Grid.Row);
グリッドの選択された行は、プロパティで与えられます。
TCustomGrid
にはDeleteRow
メソッドが含まれていますが、保護されているため、そのクラスの子孫からは呼び出すことができません。しかし、その制限を回避するのは簡単です。 TCustomGrid
子孫を宣言し、グリッドコントロールをその新しい型に型キャストします。結果にDeleteRow
を呼び出してください。
type
TCustomGridAccess = class(TCustomGrid) end;
procedure DeleteGridRow(g: TCustomGrid; row: Integer);
begin
TCustomGridAccess(g).DeleteRow(row);
end;
Delphiで、保護された可視性を持つメンバーは、クラスの宣言と同じユニット内公共暗黙的であるため、これが動作します。 TCustomGrid
はグリッドユニットで宣言されていますが、TCustomGridAccess
クラスはユニットのユニットに宣言されているため、DeleteRow
を含むすべての保護されたメソッドにアクセスできます。
あなたのDelphiのバージョンが十分に新しいものである場合は、クラスヘルパーを使用することができます。クラスヘルパーは保護されたメンバにアクセスすることができ、技術的に無関係な型への型変換は不要です。
type
TCustomGridHelper = class helper for TCustomGrid
public
procedure DelRow(ARow: Integer);
end;
procedure TCustomGridHelper.DelRow(ARow: Integer);
begin
Self.DeleteRow(ARow);
end;
次に、ヘルパーを宣言した場所のユニットを使用してください。あなたが試したコードは唯一、あなたはおそらくデクリメントしている、最後の行を削除した場合
grid.DelRow(grid.Row);
- 1. Yiiで行を削除するにはどうすればよいですか?
- 2. テキストファイルの行を削除するにはどうすればよいですか?
- 3. Delphi:delete TStringGridを削除する
- 4. TextBoxに行を追加/削除しないようにするにはどうすればよいですか?
- 5. ''をリストから削除するにはどうすればよいですか?
- 6. cURLを実行すると、「クッキーの削除」を行うにはどうすればよいですか?
- 7. postgresqlでストアドプロシージャを削除するにはどうすればよいですか?
- 8. Androidでナビゲーションバーを削除するにはどうすればよいですか?
- 9. NSMutableURLRequestでヘッダーを削除するにはどうすればよいですか?
- 10. CKEDITORでボーダーを削除するにはどうすればよいですか?
- 11. スパンをインプレイスで削除するにはどうすればよいですか?
- 12. ホームページでウォーターマークを削除するにはどうすればよいですか?
- 13. javascriptでイベントリスナーを削除するにはどうすればよいですか?
- 14. ItemRendererでEventListenerを削除するにはどうすればよいですか?
- 15. Mercurialでリモートブックマークを削除するにはどうすればよいですか?
- 16. Railsでワイルドカードクッキーを削除するにはどうすればよいですか?
- 17. Presenterでアクティビティコンテキストを削除するにはどうすればよいですか?
- 18. OpsCenterでオブジェクトを削除するにはどうすればよいですか?
- 19. リンククリックでアウトラインを削除するにはどうすればよいですか?
- 20. XDocumentでXELEMENTを削除するにはどうすればよいですか?
- 21. Nokogiriでノードを削除するにはどうすればよいですか?
- 22. plistをプログラムで削除するにはどうすればよいですか?
- 23. コーディングウィンドウでエラーメッセージを削除するにはどうすればよいですか?
- 24. アンドロイドでレイアウトを削除するにはどうすればよいですか?
- 25. サンドボックスアプリケーションでアプリケーションを削除するにはどうすればよいですか?
- 26. ValueEventListenerをアンドロイドで削除するにはどうすればよいですか?
- 27. gulpでtemplateCacheを削除するにはどうすればよいですか?
- 28. ファイルにデータストアを削除するにはどうすればよいですか?
- 29. 削除されたファイルからPyDevデバッガブレークポイントを削除するにはどうすればよいですか?
- 30. Houghによって検出された行を削除するにはどうすればよいですか?
:グリッドの現在の行を削除するには
、このように関数を呼び出します2行目を 'Grid.Objects [0、I]:= Grid.Objects [0、I + 1];'に置き換えます。これは、使用されていないコンテンツ全体を置き換えるよりも少し速いです。 –