Delphi中EditMask手机号输入优化:实现右侧输入自动左移填充
Delphi手机号掩码输入自动左移实现方案
核心逻辑
通过拦截输入事件自定义数字填充规则:
- 仅允许输入数字和退格键
- 输入新数字时,自动填充左侧空位(或按需求实现数字左移补位)
- 固定光标在最右侧,无需手动调整位置
代码实现
场景1:带分隔符的掩码输入(如XXX-XXXXXXXX格式)
使用TMaskEdit,掩码设为___-________,并添加以下事件处理:
- OnKeyPress 事件
procedure TForm1.MaskEdit1KeyPress(Sender: TObject; var Key: Char); var CurrentText: string; I: Integer; begin // 过滤非数字、非退格键输入 if not (Key in ['0'..'9', #8]) then begin Key := #0; Exit; end; // 处理数字输入:填充左侧第一个空位 if Key in ['0'..'9'] then begin CurrentText := TMaskEdit(Sender).Text; for I := 1 to Length(CurrentText) do begin if CurrentText[I] = '_' then begin CurrentText[I] := Key; TMaskEdit(Sender).Text := CurrentText; // 光标回到最右侧 TMaskEdit(Sender).SelStart := Length(TMaskEdit(Sender).Text); Key := #0; Break; end; end; Exit; end; // 处理退格键:删除右侧第一个已填充数字,恢复为占位符 if Key = #8 then begin CurrentText := TMaskEdit(Sender).Text; for I := Length(CurrentText) downto 1 do begin if CurrentText[I] <> '_' then begin CurrentText[I] := '_'; TMaskEdit(Sender).Text := CurrentText; TMaskEdit(Sender).SelStart := Length(TMaskEdit(Sender).Text); Key := #0; Break; end; end; end; end;
- OnEnter 事件(固定光标在最右侧)
procedure TForm1.MaskEdit1Enter(Sender: TObject); begin TMaskEdit(Sender).SelStart := Length(TMaskEdit(Sender).Text); end;
场景2:无分隔符的纯数字输入
使用普通TEdit,设置MaxLength=11,实现从右往左填充(输入数字自动左移补位):
- OnKeyPress 事件
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); var CurrentText: string; begin if not (Key in ['0'..'9', #8]) then begin Key := #0; Exit; end; // 数字输入:新数字补在左侧,现有内容右移 if Key in ['0'..'9'] then begin CurrentText := Edit1.Text; if Length(CurrentText) >= 11 then begin Key := #0; Exit; end; Edit1.Text := Key + CurrentText; Edit1.SelStart := Length(Edit1.Text); Key := #0; Exit; end; // 退格键:删除最左侧数字 if Key = #8 then begin if Length(Edit1.Text) > 0 then Edit1.Text := Copy(Edit1.Text, 2, MaxInt); Edit1.SelStart := Length(Edit1.Text); Key := #0; end; end;
- OnEnter 事件
procedure TForm1.Edit1Enter(Sender: TObject); begin Edit1.SelStart := Length(Edit1.Text); end;
内容的提问来源于stack exchange,提问作者Erick Landim
相关产品推荐
相关产品推荐

