ListView - błąd po kliknięciu w pustą część.

0

Witam, jako początkujący użytkownik DELPHI tworzę program z użyciem komponentu LISTVIEW. Po krótce chcę, żeby po 2 krotnym kliknięciu na którąś z wyświetlonych linii w ListView ukazało się okienko z editami i wczytanymi do nich danymi z tabeli listView. Z "przenoszeniem" i wczytywaniem danych sobie poradziłem, jednak mam problem gdy kliknę na puste pole pod rekordami ListView (obszar zaznaczony na czerwono). Wtedy wyrzuca mi błąd. Przy 2 krotnym kliknięciu na pola "niepuste" program działa prawidłowo. Pytanie jest jak oprogramować to zdarzenie, żeby wyeliminować pokazywanie się tego błędu ?

Znalazłem i próbowałem chwyt z linka poniżej - nie przynosi efektu:

http://4programmers.net/Delphi/faq/Co_zrobi%C4%87_w_ListView,_aby_po_klikni%C4%99ciu_na_puste_pole_program_nie_generowa%C5%82_b%C5%82%C4%99du

Kombinowałem też z ograniczeniem zaznaczania do Items.Count ale to też nie spełniało zadania.

Pozdrawiam

0

Przecież debugier ci pokazuje w którym miejscu wywala błąd co za problem dodać jeden prosty warunek.

0

Zdążyłem już zapoznać się z informacjami dot. debbugera w delphi na 4programmers, jednak do mnie to nie przemawia, oznaczam obszar, który generuje błąd ale nie wiem gdzie szukać problemu. Może chociaż mógłbym dostać wskazówkę, którego parametru mam się czepić. A też będę wdzięczny za informacje jak używać debbugera :)

0

Zaskoczyłem :) magiczne nil :) myślę, że sobie już poradzę.

0

Ale ja wcale nie kwestionuję tego, że bardziej utrwala się coś do czego samemu się dojdzie, jednak praktycznie jestem już na finiszu tego programu a ten "problem" ciągnie się za mną od samego początku. Heh tego debbugera zastępowałem sobie do tej pory editem i wrzucaniem wartości do niego w trakcie wykonywania programu :) Jak widać niepotrzebnie. Ale czasem mi też bardzo pomaga magiczny palec, który wskaże chociaż gdzie patrzeć, szukać. Delphi miałem na studiach, przepychałem ten temat, żeby tylko przejść. Teraz tknęło mnie, potrzebuję niewielki program, który ułatwiłby mi życie i postanowiłem spróbować w delphi. Przyznam, że nawet się udało, pewnie wprawiony programista zrobiłby 3 razy krótszy i też by działał ale od czegoś muszę zacząć:) Przyznam się, że na forum bardzo rzadko pytam, bo 99% moich problemów udaje mi się wyszukać w już istniejących wątkach. Dzięki za podpowiedź.

0

A nie wystarczy sprawdzić czy ItemIndex=-1

0
_13th_Dragon napisał(a)

Bla ListBox'a dokładnie tak, ale pytanie dotyczy ListView a tam ... o boże ... trza sprawdzić czy =nil !

Jak nie jak tak.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    Label1: TLabel;
    procedure ListView1DblClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  ListView1.Items.Add.Caption:='pelsta';
  ListView1.Items.Add.Caption:='krwq';
  ListView1.Items.Add.Caption:='_13th_Dragon';
end;

procedure TForm1.ListView1DblClick(Sender: TObject);
var
  i:Integer;
begin
  i:=ListView1.ItemIndex;
  if i=-1 then
    Application.MessageBox('Kliknąłeś na puste pole','')
  else
    label1.Caption:=ListView1.Items[i].Caption;
end;


end.

1 użytkowników online, w tym zalogowanych: 0, gości: 1