Как удалить фокус из текстового поля в WinForms?



мне нужно удалить фокус из нескольких текстовых полей. Я пробовал использовать:



textBox1.Focused = false;


его ReadOnly стоимость имущества составляет true.



затем я попытался установить фокус на форму, чтобы удалить ее из всех текстовых полей, но это также не работает:



this.Focus();


и функция возвращает false при выборе текстового поля.



Итак, как мне удалить фокус из текстового поля?

924   18  

18 ответов:

вам нужен какой-то другой фокусируемый элемент управления для перемещения фокуса.

обратите внимание, что вы можете установить фокус на этикетку. Возможно, вы захотите рассмотреть, где вы хотите, чтобы ключ [Tab] взял его дальше.

Также обратите внимание, что вы не можете установить его на форму. Контейнерные элементы управления, такие как форма и панель, передадут фокус на свой первый дочерний элемент управления. Это может быть текстовое поле, от которого вы хотите его отодвинуть.

фокусировка на этикетке не сработала для меня, делая что-то вроде label1.Focus() верно? текстовое поле по-прежнему имеет фокус при загрузке формы, однако попытка велоцирапторы ответ, работал для меня, установив активный элемент управления формы на метку следующим образом:

private void Form1_Load(object sender, EventArgs e)  
{ 
    this.ActiveControl = label1;       
}

вы можете добавить следующий код:

this.ActiveControl = null;  //this = form

попробуйте отключить и включить текстовое поле.

вы также можете установить формы activecontrol свойство null как

ActiveControl = null;

Focus устанавливает фокус ввода, поэтому установка его в форму не будет работать, потому что формы не принимают ввод. Попробуйте установить форму ActiveControl свойство для другого элемента управления. Вы также можете использовать Select для выбора конкретного элемента управления или SelectNextControl для выбора следующего элемента управления в порядке табуляции.

попробуй это:

Сначала установите порядок вкладок.

затем в случае загрузки формы мы можем отправить нажатие клавиши tab программно в приложение. Так что приложение будет уделять внимание 1-й contol в порядке табуляции.

в форме загрузки даже писать эту строку.

SendKeys.Send("{TAB}");

это сработало для меня.

этот пост приведет меня к этому:

ActiveControl = null;

Это позволяет мне захватить все ввода с клавиатуры на верхнем уровне без других элементов управления сходит с ума.

Кажется, что мне не нужно устанавливать фокус на какие-либо другие элементы. В приложении Windows Phone 7 я использовал метод Focus для снятия фокуса текстового поля.

при выполнении следующей команды фокус будет смещен в ничто:

void SearchBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        Focus();
    }
}

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx

это сработало для меня, но я не знаю, почему это не сработало для вас :/

простым решением было бы убить фокус, просто создайте свой собственный класс:

public class ViewOnlyTextBox : System.Windows.Forms.TextBox {
    // constants for the message sending
    const int WM_SETFOCUS = 0x0007;
    const int WM_KILLFOCUS = 0x0008;

    protected override void WndProc(ref Message m) {
        if(m.Msg == WM_SETFOCUS) m.Msg = WM_KILLFOCUS;

        base.WndProc (ref m);
    }
}

Я нашел хорошую альтернативу! Это работает лучше всего для меня, не ставя акцент на чем-то другом.

попробуй это:

private void richTextBox_KeyDown(object sender, KeyEventArgs e)
{    
    e.SuppressKeyPress = true;
}

Я сделал это на моем пользовательском элементе управления, я сделал это onFocus ()

this.Parent.Focus();

Так что если texbox focused-это мгновенно фокус textbox parent (форма или панель...) Это хороший вариант, если вы хотите сделать это на пользовательский элемент управления.

    //using System;
    //using System.Collections.Generic;
    //using System.Linq;

    private void Form1_Load(object sender, EventArgs e)
    {
        FocusOnOtherControl(Controls.Cast<Control>(), button1);
    }

    private void FocusOnOtherControl<T>(IEnumerable<T> controls, Control focusOnMe) where T : Control
    {
        foreach (var control in controls)
        {
            if (control.GetType().Equals(typeof(TextBox)))
            {
                control.TabStop = false;
                control.LostFocus += new EventHandler((object sender, EventArgs e) =>
                {                     
                    focusOnMe.Focus();
                });
            }
        }
    }

то, как я обойти это, чтобы разместить все мои элементы управления winform. Я делаю все метки и не выбираю элементы управления winform как порядок табуляции 0, затем мой первый элемент управления как порядок табуляции 2, а затем увеличиваю порядок каждого выбираемого элемента управления на 1, поэтому 3, 4, 5 и т. д...

таким образом, когда мои Winforms запускаются, первое текстовое поле не имеет фокуса!

вы можете сделать это двумя способами

  • просто сделайте свойства "TabStop" нужного текстового поля ложными теперь он не будет фокусироваться, даже если у вас есть одно текстовое поле
  • перетащите два текстовых поля

    1. сделайте видимым тот, на котором вы не хотите foucus, который является textbox1
    2. сделайте второй невидимым и перейдите к свойствам этого текстового поля и выберите

tabindex значение 0 из textbox2

  1. и выберите tabindex вашего textbox1 к 1 теперь он не будет фокусироваться на textbox1

Если все, что вам нужно, это оптический эффект, что текстовое поле не имеет синего выделения по всему его содержимому, просто выберите нет текста:

textBox_Log.SelectionStart = 0;
textBox_Log.SelectionLength = 0;
textBox_Log.Select();

после этого, при добавлении контента с .Text += "...", синий выбор не будет показан.

пожалуйста, попробуйте установить TabStop to False для вашего управления видом, который не фокусируется.

например:

txtEmpID.TabStop = false;

в конструкторе формы или UserControl удерживая текстовое поле write

SetStyle(ControlStyles.Selectable, false);

после инициализации компонента(); Источник: https://stackoverflow.com/a/4811938/5750078

пример:

public partial class Main : UserControl
{

    public Main()
    {
        InitializeComponent();
        SetStyle(ControlStyles.Selectable, false);
    }

Comments

    Ничего не найдено.