Control.LostFocus 事件
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
發生於控制項遺失焦點時。
public:
event EventHandler ^ LostFocus;
[System.ComponentModel.Browsable(false)]
public event EventHandler LostFocus;
[System.ComponentModel.Browsable(false)]
public event EventHandler? LostFocus;
[<System.ComponentModel.Browsable(false)>]
member this.LostFocus : EventHandler
Public Custom Event LostFocus As EventHandler
事件類型
- 屬性
範例
下列程式碼範例示範驗證 TextBox1 的文字。 它也會示範如何藉由將 FileDialog.InitialDirectory 屬性設定為 TextBox1 中的文字來處理 LostFocus 事件。 程式碼範例使用 ErrorProvider.GetError 方法在開啟檔案對話方塊之前檢查錯誤。 若要執行此範例,請將下列程式碼貼到表單中,其中包含 TextBox 名為 的 、 OpenFileDialog 名為 的 、 Button 名為 Button1
OpenFileDialog1
的 ,以及 ErrorProvider 名為 ErrorProvider1
TextBox1
的 。 確定所有事件都與其事件處理常式相關聯。
private:
void TextBox1_Validating( Object^ sender,
System::ComponentModel::CancelEventArgs^ e )
{
// If nothing is entered,
// an ArgumentException is caught; if an invalid directory is entered,
// a DirectoryNotFoundException is caught. An appropriate error message
// is displayed in either case.
try
{
System::IO::DirectoryInfo^ directory = gcnew System::IO::DirectoryInfo( TextBox1->Text );
directory->GetFiles();
ErrorProvider1->SetError( TextBox1, "" );
}
catch ( System::ArgumentException^ )
{
ErrorProvider1->SetError( TextBox1, "Please enter a directory" );
}
catch ( System::IO::DirectoryNotFoundException^ )
{
ErrorProvider1->SetError( TextBox1, "The directory does not exist."
"Try again with a different directory." );
}
}
// This method handles the LostFocus event for TextBox1 by setting the
// dialog's InitialDirectory property to the text in TextBox1.
void TextBox1_LostFocus( Object^ sender, System::EventArgs^ e )
{
OpenFileDialog1->InitialDirectory = TextBox1->Text;
}
// This method demonstrates using the ErrorProvider.GetError method
// to check for an error before opening the dialog box.
void Button1_Click( System::Object^ sender, System::EventArgs^ e )
{
//If there is no error, then open the dialog box.
if ( ErrorProvider1->GetError( TextBox1 )->Equals( "" ) )
{
::DialogResult dialogResult = OpenFileDialog1->ShowDialog();
}
}
private void textBox1_Validating(object sender,
System.ComponentModel.CancelEventArgs e)
{
// If nothing is entered,
// an ArgumentException is caught; if an invalid directory is entered,
// a DirectoryNotFoundException is caught. An appropriate error message
// is displayed in either case.
try
{
System.IO.DirectoryInfo directory =
new System.IO.DirectoryInfo(textBox1.Text);
directory.GetFiles();
errorProvider1.SetError(textBox1, "");
}
catch(System.ArgumentException ex1)
{
errorProvider1.SetError(textBox1, "Please enter a directory");
}
catch(System.IO.DirectoryNotFoundException ex2)
{
errorProvider1.SetError(textBox1, "The directory does not exist." +
"Try again with a different directory.");
}
}
// This method handles the LostFocus event for textBox1 by setting the
// dialog's InitialDirectory property to the text in textBox1.
private void textBox1_LostFocus(object sender, System.EventArgs e)
{
openFileDialog1.InitialDirectory = textBox1.Text;
}
// This method demonstrates using the ErrorProvider.GetError method
// to check for an error before opening the dialog box.
private void button1_Click(System.Object sender, System.EventArgs e)
{
//If there is no error, then open the dialog box.
if (errorProvider1.GetError(textBox1)=="")
{
DialogResult dialogResult = openFileDialog1.ShowDialog();
}
}
Private Sub TextBox1_Validating(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) _
Handles TextBox1.Validating
' If nothing is entered,
' an ArgumentException is caught; if an invalid directory is entered,
' a DirectoryNotFoundException is caught. An appropriate error message
' is displayed in either case.
Try
Dim directory As New System.IO.DirectoryInfo(TextBox1.Text)
directory.GetFiles()
ErrorProvider1.SetError(TextBox1, "")
Catch ex1 As System.ArgumentException
ErrorProvider1.SetError(TextBox1, "Please enter a directory")
Catch ex2 As System.IO.DirectoryNotFoundException
ErrorProvider1.SetError(TextBox1, _
"The directory does not exist." & _
"Try again with a different directory.")
End Try
End Sub
' This method handles the LostFocus event for TextBox1 by setting the
' dialog's InitialDirectory property to the text in TextBox1.
Private Sub TextBox1_LostFocus(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles TextBox1.LostFocus
OpenFileDialog1.InitialDirectory = TextBox1.Text
End Sub
' This method demonstrates using the ErrorProvider.GetError method
' to check for an error before opening the dialog box.
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'If there is no error, then open the dialog box.
If ErrorProvider1.GetError(TextBox1) = "" Then
Dim dialogResult As DialogResult = OpenFileDialog1.ShowDialog()
End If
End Sub
備註
當您使用鍵盤 (TAB、SHIFT+TAB 等) 、呼叫 Select 或 SelectNextControl 方法,或將 屬性設定 ContainerControl.ActiveControl 為目前表單來變更焦點時,焦點事件會依下列順序發生:
當您使用滑鼠或呼叫 Focus 方法來變更焦點時,焦點事件會依下列順序發生:
CausesValidation如果 屬性設定為 false
,則會 Validating 隱藏 和 Validated 事件。
如果在事件委派中將 Cancel 的 CancelEventArgs 屬性設定為 true
,則通常會在隱藏事件之後 Validating 發生的所有事件。 Validating
注意
GotFocus和 LostFocus 事件是系結至WM_KILLFOCUS和WM_SETFOCUS Windows 訊息的低階焦點事件。 一般而言, GotFocus 只有在更新 UICues 或撰寫自訂控制項時,才會使用 和 LostFocus 事件。 相反地, Enter 和 Leave 事件應該用於 類別以外的 Form 所有控制項,而這個類別會使用 Activated 和 Deactivate 事件。 如需 和 LostFocus 事件的詳細資訊 GotFocus ,請參閱WM_KILLFOCUS和WM_KILLFOCUS主題。
警告
請勿嘗試從 、 GotFocus 、 Leave 、 LostFocus 、 Validating 或 Validated 事件處理常式內 Enter 設定焦點。 這樣做可能會導致您的應用程式或作業系統停止回應。 如需詳細資訊,請參閱 WM_KILLFOCUS 主題。
如需處理事件的詳細資訊,請參閱 處理和引發事件。