Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi E2362 Auf protected-Symbol TCustomGrid.DeleteRow kann nicht zugegriffen werden (https://www.delphipraxis.net/183174-e2362-auf-protected-symbol-tcustomgrid-deleterow-kann-nicht-zugegriffen-werden.html)

Kralle 17. Dez 2014 18:51

E2362 Auf protected-Symbol TCustomGrid.DeleteRow kann nicht zugegriffen werden
 
Moin,

obige Fehlermeldung
Zitat:

E2362 Auf protected-Symbol TCustomGrid.DeleteRow kann nicht zugegriffen werden
macht mir Stress.
Ich wollte eigentlich nur folgendes machen:
Code:
if strngrd1.Row >= strngrd1.FixedRows then strngrd1.DeleteRow(strngrd1.Row);
um eine Zeile in einem StringGrid eine Zeile zu löschen.

Aber, schon in der IDE wird
Code:
.DeleteRow
als fehlerhaft gekennzeichnet.

In den Tipps im WWW zum Thema
Zitat:

Zeile in eine StrinGrid löschen
wird
Code:
.DeleteRow
genutzt.
Ist das jetzt ein XE7 Problem?
Wie umgehe ich das Problem?

Gruß Heiko

Sir Rufo 17. Dez 2014 19:01

AW: E2362 Auf protected-Symbol TCustomGrid.DeleteRow kann nicht zugegriffen werden
 
Hast du schon in die Dokumentation geschaut?

Warum nicht? F1 kaputt, Internet kaputt, Brille kaputt?

Kralle 17. Dez 2014 19:24

AW: E2362 Auf protected-Symbol TCustomGrid.DeleteRow kann nicht zugegriffen werden
 
Hallo,

mit
Delphi-Quellcode:

// Quelle: [URL="http://stackoverflow.com/questions/16351109/how-do-i-delete-a-tstringgrid-row"]http://stackoverflow.com/questions/16351109/how-do-i-delete-a-tstringgrid-row[/URL]
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;
bekomme ich die Zeilen wie gewünscht gelöscht.

Auch diesen Trick habe ich gefunden:
Delphi-Quellcode:
type
    THackGrid=class(TCustomGrid);

[...]
THackGrid(strngrd1).DeleteRow(zeile);
Nur scheint der anstatt wirklich zu löschen die entsprechenden Zeilen nur aus dem definierten Bereich der Tabelle zuverschieben.
Wenn
Code:
RowCount
z.B. erst 6 ist, dann zwei Zeilen damit gelöscht werden und man dann
Code:
RowCount
auf 8 erhöht, dann tauchen dort die gelöschten Inhalte wieder auf :?

Aber, warum ist bei dem einfachen
Delphi-Quellcode:
TStringGrid
das ich auf das Formular ziehe, das Löschen gesperrt.
Ich habe keine Option zum Entsperren gefunden. Aber was nützt eine Option die nicht nutzbar ist?

Gruß Heiko

BadenPower 17. Dez 2014 19:49

AW: E2362 Auf protected-Symbol TCustomGrid.DeleteRow kann nicht zugegriffen werden
 
Zitat:

Zitat von Kralle (Beitrag 1283812)
Nur scheint der anstatt wirklich zu löschen die entsprechenden Zeilen nur aus dem definierten Bereich der Tabelle zuverschieben.

Die Methode DeleteRow löscht die Reihe nicht wirklich, sondern verschiebt diese nur ans Ende und setzt dann RowCount auf RowCount-1


Zitat:

Zitat von Kralle (Beitrag 1283812)
Aber, warum ist bei dem einfachen TStringGrid das ich auf das Formular ziehe, das Löschen gesperrt.

Weil die Entwickler von Delphi dies so vorgesehen haben.

Zitat:

Zitat von Kralle (Beitrag 1283812)
Aber was nützt eine Option die nicht nutzbar ist?

Sie ist doch nutzbar, aber eben nicht in TStringGrid oder TCustomGrid.

Zitat:

Zitat von Kralle (Beitrag 1283812)
Ich habe keine Option zum Entsperren gefunden.

Die Option zum Entsperren einer Protected-Methode heisst anlegen einer neuen Klasse.

Dejan Vu 17. Dez 2014 20:15

AW: E2362 Auf protected-Symbol TCustomGrid.DeleteRow kann nicht zugegriffen werden
 
'protected' heißt nicht 'gesperrt', sondern 'geschützt'. Und zwar geschützt gegen Aufrufe von außen. Vermutlich weil DeleteRow so komisch umgesetzt wurde, haben sich die Entwickler gedacht:"Na, lieber nicht öffentlich machen, sonst kommt ein Programmierer vielleicht auf die Idee, das Grid zur Datenhaltung zu missbrauchen, anstatt es nur zur Darstellung von Information zu benutzen". Nur so ne Idee.

Kralle 17. Dez 2014 20:55

AW: E2362 Auf protected-Symbol TCustomGrid.DeleteRow kann nicht zugegriffen werden
 
N'abend,

Zitat:

Zitat von BadenPower (Beitrag 1283814)
Die Methode DeleteRow löscht die Reihe nicht wirklich, sondern verschiebt diese nur ans Ende und setzt dann RowCount auf RowCount-1

Okay, dann ist die Methode also eh nicht das was der Name verspricht.

Zitat:

Zitat von BadenPower (Beitrag 1283814)
Sie ist doch nutzbar, aber eben nicht in TStringGrid oder TCustomGrid.

Die Option zum Entsperren einer Protected-Methode heisst anlegen einer neuen Klasse.

Okay, aber durch obige Aussage kann ich mir das sparen.
Dann mache ich das also lieber für die Procedure die ich weiter oben gepostet habe.

Schönen Abend noch.
Gruß Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz