элемента - c# фокус на элемент




Как удалить фокус из TextBox в WinForms? (12)

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

textBox1.Focused = false;

Свойство свойства ReadOnly true .

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

this.Focus();

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

Итак, как удалить фокус из TextBox?


В конструкторе формы или UserControl, где выполняется запись TextBox

SetStyle(ControlStyles.Selectable, false);

После InitializeComponent (); Источник: https://.com/a/4811938/5750078

Пример:

public partial class Main : UserControl
{

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

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

this.ActiveControl = null;  //this = form

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

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

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


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

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

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


Попробуй это..

сначала настройте порядок вкладок ..

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

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

SendKeys.Send("{TAB}");

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


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


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

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);
    }
}

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

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

Этот пост заставил меня сделать это:

ActiveControl = null;

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


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

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

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

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

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

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

Значение tabindex до 0 текстового поля2

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

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





focus