全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1760
推到 Plurk!
推到 Facebook!

在使用DBGrid.SelectIndex 的 OnColExit 時

答題得分者是:P.D.
Charlies Chang
一般會員


發表:3
回覆:9
積分:7
註冊:2003-05-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-03 23:55:08 IP:220.130.xxx.xxx 訂閱
有一個有趣的狀況:

在DBGird 中指定一個事件 DBGrid1ColExit
[code delphi]
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
if DBGrid1.SelectedIndex=XXXX then DBGrid1.SelectedIndex:=0;
DBGrid1.setFocus;
end;

[/code]

如果 XXXX 等於 0 時,
這個式子將不會生效.(怎麼跑都會跑到[1])

那麼我們就不能去: 檢查 [0] 的值,在檢查不過後,強行讓它保持在[0]的位置.

請有此經驗的先進指點一下,Thanks
編輯記錄
Charlies Chang 重新編輯於 2008-10-03 23:57:50, 註解 無‧
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-04 00:38:06 IP:61.67.xxx.xxx 未訂閱
按你的方式測並沒有任何問題, 確實會跳到 0, 是不是你的 table 沒有 open?
Charlies Chang
一般會員


發表:3
回覆:9
積分:7
註冊:2003-05-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-04 01:33:50 IP:220.130.xxx.xxx 訂閱
謝謝回覆

我重新試了一個 Clean 的 樣本,還是會這樣.
ADODataset1 當然有開啟.
請看一下.

我在 Delphi2007 做的.


[code delphi]
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids, ExtCtrls;

type
TForm1 = class(TForm)
Panel1: TPanel;
DBGrid1: TDBGrid;
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
procedure FormCreate(Sender: TObject);
procedure DBGrid1ColExit(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
if (DBGrid1.SelectedIndex=0) and (DBgrid1.SelectedField.AsString='1') then //<-這一行判斷後,條件符合,但没有把 Focus 攔在 cloumn[0].
DBGrid1.SelectedIndex:=0;
DBgrid1.SetFocus;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
DBGrid1.Align:=alClient;
end;

end.

[/code]

Thanks

P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-04 23:00:04 IP:61.67.xxx.xxx 未訂閱
sorry, 沒仔細看你的內文, 發現你的程式寫法的確會造成 index 無法歸位, 但沒有時間幫你細查, 看看有沒有其他高人可以協助!
Charlies Chang
一般會員


發表:3
回覆:9
積分:7
註冊:2003-05-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-05 12:38:44 IP:220.130.xxx.xxx 訂閱
還是謝謝您

換個方法就可以了.

[code delphi]
if (DBGrid1.SelectedIndex=0) and (DBgrid1.SelectedField.AsString='1') then ABORT; //<-改成這樣後可行.
[/code]
編輯記錄
Charlies Chang 重新編輯於 2008-10-05 13:06:10, 註解 無‧
系統時間:2024-11-24 20:15:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!