Đánh giá chủ đề:
  • 1 Votes - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Help] Cập nhật giá trị của một textbox ngay sau khi gõ một ký tự ở textbox khác.
#1
Hôm trước mình viết ứng dụng sửa tên tập tin hàng loạt (mình đã post lên forum). Anh bạn của mình rất khoái. Nhưng anh đề nghị thêm là sau khi gõ 1 ký tự ở những ô như đặt tên, thêm từ vào tên thì danh sách đổi ngay lập tức sau những lần gõ phím (ngay trong khi edit text) mà không đợi đến khi textbox mất focus mới cập nhật danh sách.
Mình đã thử xử lý bằng cách dùng 1 textbox A cập nhật giá trị cho một texbox B, bằng cách đưa các bẫy event (change, dirty, key down, key up) nhưng vẫn không được (textbox B chỉ thay đổi giá trị theo textbox A khi textbox mất focus), ngay khi sử dụng form timer thì textbox B cũng trơ trơ khi textbox chưa mất focus. Nhờ các bạn nghiên cứu thêm giúp mình điều này.
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , maidinhdan
#2
(23-07-15, 07:26 AM)tranthanhan1962 Đã viết: Hôm trước mình viết ứng dụng sửa tên tập tin hàng loạt (mình đã post lên forum). Anh bạn của mình rất khoái. Nhưng anh đề nghị thêm là sau khi gõ 1 ký tự ở những ô như đặt tên, thêm từ vào tên thì danh sách đổi ngay lập tức sau những lần gõ phím (ngay trong khi edit text) mà không đợi đến khi textbox mất focus mới cập nhật danh sách.
Mình đã thử xử lý bằng cách dùng 1 textbox A cập nhật giá trị cho một texbox B, bằng cách đưa các bẫy event (change, dirty, key down, key up) nhưng vẫn không được (textbox B chỉ thay đổi giá trị theo textbox A khi textbox mất focus), ngay khi sử dụng form timer thì textbox B cũng trơ trơ khi textbox chưa mất focus. Nhờ các bạn nghiên cứu thêm giúp mình điều này.

Đây là điểm mà Access có sự khác biệt với VB. Trong VB, nếu muốn lấy giá trị một textbox khi đang soạn thì chỉ cần gọi ten.text là được. Với access có 2 cách gọi
1. Gọi tên textbox
2. Với thuộc tính text
Cách thức access quản lý thuộc tính giá trị của textbox như sau:
Update: khi giá trị của textbox thay đổi. Thời điểm xác định sự thay đổi là khi gõ Enter hoặc tab hoặc chuyển focus sang đối tượng khác
Để lấy được giá trị đang gõ vào thì dùng đến thuộc tính Text

Với trường hợp của bác, thì dùng cách này sẽ lấy được giá trị đang nhập trên textbox
Bác phải dùng thuộc tính textA.text thì mới lấy được giá trị đang thao tác của text ạ! dùng sự kiện textchange bác nhé 

Ví dụ form của bác có Text1 và Text2 thì chỉ cần đặt thủ tục này
Private Sub Text1_Change()
    Text2 = Text1.Text
End Sub

Với SelStart, SelLengtj... ... thì người thường đặt thủ tục phức tạp hơn để sử dụng phản hồi theo nội dung gõ vào của người dùng ví dụ trong từ điển chẳng hạn để đoán text và tìm từ phù hợp.

Kính thư
 có
Chữ ký của paulsteigel ====================
Quốc gia hưng vong
Thất phu hữu trách
====================
Reply
Những người đã cảm ơn Noname
#3
Hi anh Ân,

Lúc trước em cũng có gặp một trường hợp gần giống vậy là khi gõ Họ một ô và Tên một ô thì sẽ hiển thị ngay khi gõ Họ Tên ở 1 ô khác. Lên net tìm thì cũng pakon cũng chia sẽ code như sau:
- Dùng event On Change của textbox.
- Và vì khi bắt cái event trong textbox thì con trỏ nó không di chuyển tới mà vẫn nằm tại ký tự vừa gõ nên khi gõ ký tự kế tiếp nó sẽ xoá ký tự cũ -> phải lưu vị trí con trỏ sau đó chạy event rồi trả con trỏ lại vị trí cuối cùng để gõ tiếp (Dùng .SelStart và .SelLenght).
Vd: có 3 textbox: txtHo, txtTen, txtHoTen

Mã PHP:
   Dim vitri As Variant

   vitri 
= Array(Me.txtHo.SelStartMe.txtHo.SelLength)

   GopHoTen

   Me
.txtHo.SetFocus
   Me
.txtHo.SelStart vitri(0)
   Me.txtHo.SelLength vitri(1)
   
End Sub

Private Sub txtTen_Change()

   Dim vitri As Variant

   vitri 
= Array(Me.txtTen.SelStartMe.txtTen.SelLength)

   GopHoTen

   Me
.txtTen.SetFocus
   Me
.txtTen.SelStart vitri(0)
   Me.txtTen.SelLength vitri(1)
   
End Sub

Private Sub GopHoTen()

   Dim Hoten As String
   
   Me
.txtHo.SetFocus
   Hoten 
Me.txtHo.Text

   Me
.txtTen.SetFocus
   Hoten 
Hoten "_" Me.txtTen.Text

   
   Me
.txtHoTen.SetFocus
   Me
.txtHoTen.Text Hoten
   
End Sub 

Demo
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan , Noname , tranthanhan1962
#4
Mình đã làm được. Quá tuyệt vời. Thank bạn. 2 procedure SelStart và SelLength mình cũng có biết qua nhưng lại không nghĩ ra được phương pháp tuyệt vời này. Sau khi xử lý xong mình sẽ post lại ứng dụng đổi tên tập tin hàng loạt.
Chúc bạn luôn thành công trong sự nghiệp
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Help] Nhờ anh em trong diễn đàn giúp mình thiết kế chương trình báo dịch hàng ngày vinhpaint 1 254 21-06-16, 09:15 AM
Bài mới nhất: zinzin8x
  [Hỏi] Về sự khác nhau trong câu lệnh nạp bản ghi cho Unbound form ongke0711 5 401 30-12-15, 01:06 PM
Bài mới nhất: ongke0711
  [Help] Tính khoản thời gian trong ngày morosumo 6 373 02-12-15, 03:08 PM
Bài mới nhất: morosumo
  Hướng dẫn giúp câu lệnh mở file access khác và lệnh import data. chihienphuco 5 3,895 17-11-15, 09:47 AM
Bài mới nhất: kieu manh
  [Hỏi] Có thể tạo dấu , ngăn cách 3 chữ cuối trong textbox không? mieuhoa 3 254 17-11-15, 12:16 AM
Bài mới nhất: mieuhoa

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ