2010-02-24 3 views
3

Я уверен, что вы все знаете о том, что в Label Control нет обработчика KeyDown (и почему?) ... В любом случае, я нуждаюсь в обработчик KeyDown для Label Control и был бы признателен за любые указатели/предложения, чтобы начать меня.Создание обработчика событий KeyDown для управления метками

Я искал, но не нашел информации о создании собственных обработчиков событий для управления метками. Может ли это быть C#?

Благодаря

+0

j-t-s Какова цель для этого? Поскольку пользователь не имеет ввода от пользователя, единственное, что я могу придумать, - это попытаться объединить keydown с каким-то щелчком мыши или курсором мыши. Вы можете дать более подробную информацию? – Roast

+0

Конечной целью является захват события KeyDown на методе управления ярлыками, чтобы при ярлыке с фокусом и при вводе пользовательского элемента Label Control автоматически обновлялся. Я не могу обманывать TextBox COntrol для этого. – 2010-02-24 15:21:50

+0

Как вы можете ввести ярлык? Почему бы не использовать текстовое поле? – Roast

ответ

1

я сделал следующее в конструкторе:

SetStyle (ControlStyles.Selectable, правда);

, а также переопределить OnMouseDown метод:

protected override void OnMouseDown(MouseEventArgs e) 
{ 
    base.OnMouseDown(e); 
    if (this.CanSelect) this.Select(); 
} 

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

0

На самом деле, Label унаследован от Control, поэтому он имеет KeyDown событие. Это просто, что Visual Studio не показывает его в графическом интерфейсе, потому что Label s не предназначены для получения фокуса, поэтому указанное событие обычно не срабатывает.

+1

Это правда, спасибо, что напомнили мне! Я сам придумал решение и отправлю решение после того, как закончу его тестирование. – 2010-02-25 11:28:55

2

Проблема начинается гораздо раньше. Ярлык не может получить фокусное событие. Поэтому он никогда не фокусируется и поэтому никогда не принимает событие KeyDown.

Если вам действительно нужно что-то подобное, вы должны подделать TextBox со следующими параметрами, как отправную точку:

textBox1.BorderStyle = BorderStyle.None; 
textBox1.Cursor = Cursors.Default; 
textBox1.ReadOnly = true; 
textBox1.TabStop = false; 
textBox1.Text = "foo"; 

Другая возможность описана here.

1

A Label не предназначен для получения ввода от пользователя, так как другие указали, что он не может получить фокус или события Key *. Если вам удастся добиться этой работы, это будет не очевидно для пользователей, потому что они не могут нажимать на ярлык, чтобы заставить его сфокусироваться, чтобы начать печатать.

Возможно, если вы объясните больше, что вы пытаетесь достичь, кто-то может предложить альтернативу.

Смежные вопросы