Announcement

Collapse
No announcement yet.

Fehler in TListItem.Assign?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fehler in TListItem.Assign?

    Hallo Allerseits,<P>
    ich stöberte gerade in den Quellcode von Delphi herum, als mir etwas in der Unit <B>ComCtrls</B> auffiel. Die Methode <B>TListItem.Assign</B>&nbsp;(Source:TPersistent) soll den Inhalt von einem TListItem auf sich selbst kopieren.<P>

    Einzig jedoch <B>SubItems</B> wird nicht korrekt kopiert, sondern die Referenz auf das andere Objekt kopiert. Ist dieser Vorgang gewollt oder unbeabsichtigt?<P>

    Hier ein kleiner Auszug:
    <PRE>
    if Source is TListItem then
    with Source as TListItem do
    begin
    Self.Caption := Caption;
    ...
    <B>Self.SubItems := SubItems;</B>
    end
    else inherited Assign(Source);
    </PRE>

  • #2
    Hallo Jürgen,<br>es muß nicht sein, dass mit Self.SubItems := SubItems; die Referenz kopiert wird. Bei SubItems handelt es sich um eine Eigenschaft. Um eine Eigenschaft zu setzen kann auch eine SetMethode verwendet werden. Im Falle Self.SubItems := SubItems wird nicht die Referanz kopiert sondern die SetMethode auf gerufen.
    Die Methode ist wie folgt implementiert:
    <pre><font size="1" face="Verdana">procedure TListItem.SetSubItems(Value: TStrings);
    begin
    if Value &lt;&gt; nil then FSubItems.Assign(Value);
    end;
    </font></pre><br>Wie Du sieht wird hier wieder die Assign Methode aufgerufen. Daher werden die SubItems korrekt kopiert.<br>:-) Jens Schuman

    Comment

    Working...
    X