2009-03-18 59 views

Trả lời

27

Form.ActiveControl có thể là những gì bạn muốn.

+0

Chỉ muốn chỉ ra rằng nếu bạn đã thay đổi một cái gì đó (thiết lập thuộc tính .text ví dụ) nó sẽ trở lại sự kiểm soát mà bạn sử dụng lần cuối. bao gồm thiết lập những thứ như .Text không phải lúc nào cũng là điều khiển có tiêu điểm – PsychoData

-2

cái gì đó dọc những dòng này:

Protected Function GetFocusControl() As Control 
    Dim focusControl As Control = Nothing 

    ' Use this to get the Focused Control: 
    Dim focusHandle As IntPtr = GetFocus() 
    If IntPtr.Zero.Equals(focusHandle) Then   
     focusControl = Control.FromHandle(focusHandle) 
    End If 

    ' Note that it returns NOTHING if there is not a .NET control with focus 
    Return focusControl 
End Function 

Tôi nghĩ rằng mã này đến từ windowsclient.net, nhưng nó được một lúc như vậy ...

+2

Hãy để tôi downvote câu trả lời cho đến khi bạn hoàn thành nó. Cuộc gọi của 'GetFocus()' bị treo ở đâu cả và câu trả lời trong biểu mẫu này sẽ không hoạt động. – miroxlav

3

Trong C# Tôi làm điều này:

 if (txtModelPN != this.ActiveControl) 
      txtModelPN.BackColor = Color.White; 

txtModelPN là một hộp văn bản mà tôi đang làm nổi bật trên nhập và chuộtNhập và bỏ đánh dấu trên Rời, MouseLeave. Ngoại trừ nếu nó là điều khiển hiện tại tôi không đặt nền trở lại màu trắng.

VB tương đương sẽ là như thế này

IF txtModelPN <> Me.ActiveControl Then 
    txtModelPN.BackColor = Color.White 
End If 
7

Lưu ý rằng một cuộc gọi duy nhất để ActiveControl là không đủ khi phân cấp được sử dụng. Hãy tưởng tượng:

Form 
    TableLayoutPanel 
     FlowLayoutPanel 
      TextBox (focused) 

(formInstance).ActiveControl sẽ trở lại tham chiếu đến TableLayoutPanel, không phải là TextBox

Vì vậy, sử dụng này (đầy đủ tiết lộ: chuyển thể từ this C# answer)

Function FindFocussedControl(ByVal ctr As Control) As Control 
    Dim container As ContainerControl = TryCast(ctr, ContainerControl) 
    Do While (container IsNot Nothing) 
     ctr = container.ActiveControl 
     container = TryCast(ctr, ContainerControl) 
    Loop 
    Return ctr 
    End Function 
1

Bạn có thể sử dụng để tìm theo Tên kiểm soát .

If DataGridView1.Name = Me.ActiveControl.Name Then 
     TextBox1.Visible = True 
    Else 
     TextBox1.Visible = False 
    End If 
1

Bạn có thể sử dụng tính thích hợp ActiveControl của biểu mẫu và có thể sử dụng điều khiển đó.

me.ActiveControl 

Hoặc

Form.ActiveControl 
Các vấn đề liên quan