# Focusable

> Base class for objects that can get the focus.

## Definition

* **Type:** Class
* **Namespace:** [UnityEngine.UIElements](/engine/6000.7/script-reference/unityengine/uielements.md)
* **Assembly:** UnityEngine.UIElementsModule
* **Inherits from:** [CallbackEventHandler](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler.md)
* **Implements:** [IEventHandler](/engine/6000.7/script-reference/unityengine/uielements/ieventhandler.md)

```csharp
public abstract class Focusable : CallbackEventHandler, IEventHandler
```

## Remarks

The focus is used to designate an element that will receive keyboard and navigation events.

You can retrieve a panel's current focused element using its FocusController's [\_focusedElement](/engine/6000.7/script-reference/unityengine/uielements/focuscontroller/focusedelement.md) property.

Additional Resources: [KeyboardEventBase\<T>](/engine/6000.7/script-reference/unityengine/uielements/keyboardeventbase1.md), [NavigationEventBase\<T>](/engine/6000.7/script-reference/unityengine/uielements/navigationeventbase1.md)

## Examples

```csharp
using UnityEngine;
using UnityEngine.UIElements;

[RequireComponent(typeof(UIDocument))]
public class FocusExample : MonoBehaviour
{
    void OnEnable()
    {
        var startGameButton = GetComponent<UIDocument>().rootVisualElement.Q<Button>("StartGame");

        startGameButton.RegisterCallback<FocusInEvent>(ev =>
        {
            Debug.Log("FocusInEvent: button is focused and can be activated with keyboard or gamepad input.");
        });

        Debug.Log("Calling startGameButton.Focus().");
        startGameButton.Focus();

        var isFocused = startGameButton.focusController.focusedElement == startGameButton;
        Debug.Log("Immediately after startGameButton.Focus(): isFocused=" + isFocused);

        // Expected output:
        // > Calling startGameButton.Focus().
        // > FocusInEvent: button is focused and can be activated with keyboard or gamepad input.
        // > Immediately after startGameButton.Focus(): isFocused=true
    }
}
```

## Properties

| Property                                                                                               | Description                                                                                          |
| ------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- |
| [canGrabFocus](/engine/6000.7/script-reference/unityengine/uielements/focusable/cangrabfocus.md)       | Whether the element can be focused.                                                                  |
| [delegatesFocus](/engine/6000.7/script-reference/unityengine/uielements/focusable/delegatesfocus.md)   | Whether the element delegates the focus to its children.                                             |
| [focusable](/engine/6000.7/script-reference/unityengine/uielements/focusable/focusable.md)             | Whether an element can potentially receive focus.                                                    |
| [focusController](/engine/6000.7/script-reference/unityengine/uielements/focusable/focuscontroller.md) | Returns the focus controller for this element.                                                       |
| [tabIndex](/engine/6000.7/script-reference/unityengine/uielements/focusable/tabindex.md)               | An integer used to sort focusable elements in the focus ring. Must be greater than or equal to zero. |

## Methods

| Method                                                                             | Description                                 |
| ---------------------------------------------------------------------------------- | ------------------------------------------- |
| [Blur](/engine/6000.7/script-reference/unityengine/uielements/focusable/blur.md)   | Tell the element to release the focus.      |
| [Focus](/engine/6000.7/script-reference/unityengine/uielements/focusable/focus.md) | Attempts to give the focus to this element. |

## Inheritance

**Inherited Members:**

* [CallbackEventHandler.RegisterCallback\<T>(EventCallback\<T>, TrickleDown)](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/registercallback.md)
* [CallbackEventHandler.RegisterCallbackOnce\<T>(EventCallback\<T>, TrickleDown)](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/registercallbackonce.md)
* [CallbackEventHandler.RegisterCallback\<T, U>(EventCallback\<T, T>, T, TrickleDown)](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/registercallback.md)
* [CallbackEventHandler.RegisterCallbackOnce\<T, U>(EventCallback\<T, T>, T, TrickleDown)](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/registercallbackonce.md)
* [CallbackEventHandler.RegisterCallback\<T>(EventCallback\<T>, CallbackOptions)](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/registercallback.md)
* [CallbackEventHandler.RegisterCallback\<T, U>(EventCallback\<T, T>, T, CallbackOptions)](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/registercallback.md)
* [CallbackEventHandler.UnregisterCallback\<T>(EventCallback\<T>, TrickleDown)](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/unregistercallback.md)
* [CallbackEventHandler.UnregisterCallback\<T, U>(EventCallback\<T, T>, TrickleDown)](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/unregistercallback.md)
* [CallbackEventHandler.UnregisterCallback\<T>(EventCallback\<T>, CallbackOptions)](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/unregistercallback.md)
* [CallbackEventHandler.UnregisterCallback\<T, U>(EventCallback\<T, T>, CallbackOptions)](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/unregistercallback.md)
* [CallbackEventHandler.UnregisterAllRemovableCallbacks()](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/unregisterallremovablecallbacks.md)
* [CallbackEventHandler.SendEvent(EventBase)](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/sendevent.md)
* [CallbackEventHandler.HasTrickleDownHandlers()](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/hastrickledownhandlers.md)
* [CallbackEventHandler.HasBubbleUpHandlers()](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/hasbubbleuphandlers.md)
* [CallbackEventHandler.HandleEventBubbleUp(EventBase)](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/handleeventbubbleup.md)
* [CallbackEventHandler.HandleEventTrickleDown(EventBase)](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/handleeventtrickledown.md)
* [CallbackEventHandler.NotifyPropertyChanged(BindingId)](/engine/6000.7/script-reference/unityengine/uielements/callbackeventhandler/notifypropertychanged.md)
