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

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:

Kopiuj
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

edytowany 2x, ostatnio: olesio
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:10 dni
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
SP
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 12 lat
  • Postów:8
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 :)

SP
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 12 lat
  • Postów:8
0

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

_13th_Dragon
No widzisz, i założę się że samodzielnie zdobyte informacje mają większą wagę ponieważ po pierwsze tak łatwo nie zapominają się po drugie nawet jak zapomnisz to sam je odtworzysz bo wiesz jak.
SP
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 12 lat
  • Postów:8
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ź.

pelsta
  • Rejestracja:około 19 lat
  • Ostatnio:23 dni
  • Postów:819
0

A nie wystarczy sprawdzić czy ItemIndex=-1

KR
wystarczy :P
_13th_Dragon
Dla ListBox'a dokładnie tak, ale pytanie dotyczy ListView a tam ... o boże ... trza sprawdzić czy =nil !
pelsta
  • Rejestracja:około 19 lat
  • Ostatnio:23 dni
  • Postów:819
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.

Kopiuj
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.

KA
Oczywiście że tak ale z tego co widzę @_13th_Dragon nie programuje tylko w Delphi może w jakimś innym języku tak trzeba
_13th_Dragon
Z ListView ostatnio robiłem coś jeszcze w Delphi5 od tamtego czasu zarzuciłem to badziewie i działam wyłacznie na TVirtualTreeView przy potrzebach tablicy lub drzewa. W Delphi5 na 100% jeszcze nie było ItemIndex zaś było property Selected: TListItem read GetSelection write SetSelection;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.