我是delphi初学 请教一个问题 (50分)

  • 主题发起人 主题发起人 cchhw
  • 开始时间 开始时间
C

cchhw

Unregistered / Unconfirmed
GUEST, unregistred user!
我 的一个form中有一个ComboBox1: TComboBox;ComboBox1.text:='D';
请问
1。
当ComboBox1得到焦点时 光标如何才能在 D 之后,而不是在 D 之前;

2。
当ComboBox1.text接受输入 变成 D1 ,当ComboBox1再次得到焦点时, 光标在 D 之后
D 后 1 的位置接受输入,既 此时输入2,则 ComboBox1.text 由 D1 变为 D2;

万分感谢
 
combobox1.SelLength 选择的长度
combobox1.SelStart 选择的开始位置
combobox1.SelText 选择的文本

 
当ComboBox1得到焦点,它会自动全选,要改StdCtrls.pas
 
ComboBox1.SelStart:=Length(ComboBox1.Text);
 
对各位在新年中回答我的问题 万分感谢
问题 我也好象有一些明白


combobox1.SelStart:=1;
combobox1.SelLength := Length(ComboBox1.Text)-1;

以上语句 就能达到我的要求;
但我还有一些不明白,以上语句 写在什么事件 中,既怎样写才可一得到焦点即可自动触发以上语句;
我现在在 该语句前有一个 combobox1.SetFocus
但比如用 Tab键 移到combobox1,如何触发以上语句;

祝各位新年好


 
Use the OnEnter event handler to cause any special processing to occur when a control becomes active.
 
最好写在onclick事件中,如新添,修改记录时将焦点移动到combobox1上并触发:ComboBox1.SelStart:=Length(ComboBox1.Text)
可以不用:combobox1.SetFocus,
当用 Tab键 移到combobox1时会自动全选.
 
是这样的
我 把
combobox1.SelStart:=1;
combobox1.SelLength := Length(ComboBox1.Text)-1;
写在 一个 button1的 onclick 事件最后 如:
begin
........
........
combobox1.SetFocus;
combobox1.SelStart:=1;
combobox1.SelLength := Length(ComboBox1.Text)-1

end;

能达到我的要求,但把

combobox1.SelStart:=1;
combobox1.SelLength := Length(ComboBox1.Text)-1


这两句放在 combobox1 的OnEnter 事件中,跟踪 button1的 onclick 事件
在 执行 combobox1.SetFocus ;时 触发 combobox1 的OnEnter 事件,能够依次执行

combobox1.SelStart:=1;
combobox1.SelLength := Length(ComboBox1.Text)-1

但显示结果却与 把以上两句 写在button1的 onclick 事件中不同,仍然是全选状态;

两种写法 跟踪 来看执行的代码 应该是相同的,为什么结果不同;

感谢各位
 
写一个控件嘛:
///////////////////////////////////////////////////////////////////////////////
unit ComboBoxEx;

interface

uses
SysUtils, Classes, Controls, StdCtrls, Messages;

type
TComboBoxEx = class(TComboBox)
private
{ Private declarations }
FOnSetFocus: TNotifyEvent;
FOnKillFocus: TNotifyEvent;
procedure WMSetFocus(var Message: TWMSetFocus)
message WM_SETFOCUS;
procedure WMKillFocus(var Message: TWMKillFocus)
message WM_KILLFOCUS;
procedure SetOnKillFocus(const Value: TNotifyEvent);
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
// ComboBox 获得焦点时触发的事件
property OnSetFocus: TNotifyEvent read FOnSetFocus write FOnSetFocus;
// ComboBox 失去焦点时触发的事件
property OnKillFocus: TNotifyEvent read FOnKillFocus write SetOnKillFocus;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('LYF', [TComboBoxEx]);
end;

{ TComboBoxEx }

procedure TComboBoxEx.SetOnKillFocus(const Value: TNotifyEvent);
begin
FOnKillFocus := Value;
end;

procedure TComboBoxEx.WMKillFocus(var Message: TWMKillFocus);
begin
inherited;
if Assigned(FOnSetFocus) then FOnSetFocus(Self);
end;

procedure TComboBoxEx.WMSetFocus(var Message: TWMSetFocus);
begin
inherited;
if Assigned(FOnKillFocus) then FOnKillFocus(Self);
end;

end.
///////////////////////////////////////////////////////////////////////////////
 
多人接受答案了。
 
后退
顶部