Thread View: alt.pl.comp.lang.csharp
7 messages
7 total messages
Started by akowal
Sun, 05 Jun 2011 12:31
Jak dodać zdarzenie KeyDown do Panel
Author: akowal
Date: Sun, 05 Jun 2011 12:31
Date: Sun, 05 Jun 2011 12:31
5 lines
1431 bytes
1431 bytes
Prónuję zrobić aplikację w Windows Forms. W jakis posób można rozbudować Panel o zdarzenie KeyDown? Pozdrawiam
Re: Jak dodać zdarzenie KeyDown do Panel
Author: Maciej Rychter
Date: Mon, 06 Jun 2011 09:45
Date: Mon, 06 Jun 2011 09:45
24 lines
1907 bytes
1907 bytes
Witam,
no patrzę Reflectorem na Panel z nejmspejsa system.windows.forms i
wygląda, że jest tam takie zdarzenie jak KeyDown
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
public event KeyEventHandler KeyDown
{
add
{
base.KeyDown += value;
}
remove
{
base.KeyDown -= value;
}
}
problem w tym, że może ono nie być dostępne w propertisach w sensie w
desginerze viżualowym.
Jeżeli tam go nie ma to trzeba dodać z palucha w kodzie pewnie.
Pozdrawiam,
Maćko
Re: Jak dodać zdarzenie KeyDown do Panel
Author: akowal
Date: Mon, 06 Jun 2011 12:18
Date: Mon, 06 Jun 2011 12:18
29 lines
2025 bytes
2025 bytes
Witam
zrobiłem coś takiego:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.ActiveControl = this.panel1;
this.panel1.KeyDown += new KeyEventHandler(panel1_KeyDown);
}
void panel1_KeyDown(object sender, KeyEventArgs e)
{
String s = e.KeyCode.ToString();
MessageBox.Show(s);
}
}
ale jak np. wciśne klawisz "Delete", to kumunikat pojawia mi sie dwa
razy,
o co może chodzić?
Pozdrawiam
Re: Jak dodać zdarzenie KeyDown do Panel
Author: Maciej Rychter
Date: Mon, 06 Jun 2011 14:24
Date: Mon, 06 Jun 2011 14:24
35 lines
2467 bytes
2467 bytes
On 6 Cze, 14:18, akowal <akrunne...@gmail.com> wrote:
> Witam
>
> zrobiłem coś takiego:
>
> public partial class Form1 : Form
> {
> public Form1()
> {
> InitializeComponent();
> }
>
> private void Form1_Load(object sender, EventArgs e)
> {
> this.ActiveControl = this.panel1;
> this.panel1.KeyDown += new KeyEventHandler(panel1_KeyDown);
> }
>
> void panel1_KeyDown(object sender, KeyEventArgs e)
> {
> String s = e.KeyCode.ToString();
> MessageBox.Show(s);
> }
>
> }
>
> ale jak np. wciśne klawisz "Delete", to kumunikat pojawia mi sie dwa
> razy,
> o co może chodzić?
>
> Pozdrawiam
Wrzuć gdzieś przykładowy projekt. Nie wiem jakie inne kontrolki na tej
formie są i zdarzenia.
a jak ustawisz e.handled = true? To nie pomaga?
Re: Jak dodać zdarzenie KeyDown do Panel
Author: Łukasz 'Maly' Ostrowski
Date: Wed, 08 Jun 2011 09:33
Date: Wed, 08 Jun 2011 09:33
18 lines
1549 bytes
1549 bytes
On Mon, 6 Jun 2011 05:18:11 -0700 (PDT), akowal wrote: > ale jak np. wciśne klawisz "Delete", to kumunikat pojawia mi sie dwa > razy, U mnie się pojawia raz. > o co może chodzić? Lepsze pytanie: co chcesz osiągnąć? Zdarzenia "klawiszowe" są w typie Panel ukryte celowo, ponieważ kontrolka ta nie może dostać fokusa/być aktywna(no chyba że robisz hackowate ActiveControl = costam), więc nie ma sensu/możliwości bezpośrednio łapać "na niej" tychże eventów. -- Pozdrawiam, Łukasz 'Maly' Ostrowski. http://l3v.eu/
Re: Jak dodać zdarzenie KeyDown do Panel
Author: akowal
Date: Sat, 11 Jun 2011 08:26
Date: Sat, 11 Jun 2011 08:26
43 lines
2814 bytes
2814 bytes
To jest cały program
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Jeden
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.ActiveControl = this.panel1;
this.panel1.KeyDown += new KeyEventHandler(panel1_KeyDown);
}
void panel1_KeyDown(object sender, KeyEventArgs e)
{
String s = e.KeyCode.ToString();
e.Handled = true;
MessageBox.Show(s);
}
}
}
Na Form1 jest Panel i to wszystko. Chciałbym na panellu rysowac
figurę, a badać klawisz Delete po to aby
można narysowaną fiigurę usunąć. Stąd takie proste ćwiczenie, ale nie
rrozumieem dlaczego MessageBoox.Show
wywwołuje mmi się dwa razy. e.Handled = true nie pomaga.
Pozdrawiam
Re: Jak dodać zdarzenie KeyDown do Panel
Author: Maciej Rychter
Date: Fri, 17 Jun 2011 07:07
Date: Fri, 17 Jun 2011 07:07
63 lines
4580 bytes
4580 bytes
On 11 Cze, 10:26, akowal <akrunne...@gmail.com> wrote:
> To jest cały program
>
> using System;
> using System.Collections.Generic;
> using System.ComponentModel;
> using System.Data;
> using System.Drawing;
> using System.Linq;
> using System.Text;
> using System.Windows.Forms;
>
> namespace Jeden
> {
> public partial class Form1 : Form
> {
> public Form1()
> {
> InitializeComponent();
> }
>
> private void Form1_Load(object sender, EventArgs e)
> {
> this.ActiveControl = this.panel1;
> this.panel1.KeyDown += new KeyEventHandler(panel1_KeyDown);
> }
>
> void panel1_KeyDown(object sender, KeyEventArgs e)
> {
> String s = e.KeyCode.ToString();
> e.Handled = true;
> MessageBox.Show(s);
> }
> }
>
> }
>
> Na Form1 jest Panel i to wszystko. Chciałbym na panellu rysowac
> figurę, a badać klawisz Delete po to aby
> można narysowaną fiigurę usunąć. Stąd takie proste ćwiczenie, ale nie
> rrozumieem dlaczego MessageBoox.Show
> wywwołuje mmi się dwa razy. e.Handled = true nie pomaga.
>
> Pozdrawiam
Witam,
ja bym tam się nad tym zagadnieniem nie zastanawiał zbyt długo tylko
zaszedł zagadnienie od drugiej strony:
przechwytywanie komunikatów systemowych (w tym przechwytywanie
naciśnięć klawiszy) możesz zrobić za pomocą implementacji interfejsu
IMessageFilter.
Sprawdzałem to kiedyś w aplikacji i działa to całkiem zgrabnie -
jedyne czego musisz się dowiedzieć to numerek wiadomości związane z
naciśnięciem klawisza, ale to nie jest problem (Google twoim
przyjacielem jest).
Zajrzyj pod adresik: http://geekswithblogs.net/Jaggi/archive/2006/02/02/67999.aspx
Tam masz prosty przykładzik. Oczywiście taki filterek działa dla całej
aplikacji nie tylko dla wybranej formy, ale podane wymagania powinien
spełniać idealnie.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads