|
Создание событий c#
|
|||
---|---|---|---|
#18+
Здравствуйте форумчане, создал собственный контрол "MyControl", подскажите пожалуйста возможно ли в C# создать свое событие обработки нажатия клавиши на контроле, т.е. должно быть что-то вроде этого this.MyKeyDown += OnMyEventKey; ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2016, 10:54 |
|
Создание событий c#
|
|||
---|---|---|---|
#18+
Serega325, можно Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2016, 11:23 |
|
Создание событий c#
|
|||
---|---|---|---|
#18+
ИзопропилSerega325, можно Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Выдает ошибку Error 1 No overload for 'MyControl_KeyDown' matches delegate 'System.EventHandler' Заменил EventHandler на KeyEventHandler ошибки нет, но событие не срабатывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2016, 11:50 |
|
Создание событий c#
|
|||
---|---|---|---|
#18+
Serega325Заменил EventHandler на KeyEventHandler ошибки нет, но событие не срабатывает. правильно заменил. До fireMyKeyDown дело доходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2016, 13:56 |
|
Создание событий c#
|
|||
---|---|---|---|
#18+
ИзопропилSerega325Заменил EventHandler на KeyEventHandler ошибки нет, но событие не срабатывает. правильно заменил. До fireMyKeyDown дело доходит? Даже MyControl_KeyDown не вызывается. проверял через MessageBox public void MyControl_KeyDown(object sender, KeyEventArgs e) { MessageBox.Show(e.KeyCode.ToString()); // Например // if (e.Shift) fireMyKeyDown(sender, e); } ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2016, 14:01 |
|
Создание событий c#
|
|||
---|---|---|---|
#18+
Serega325, так а сам контрол на keydown подписан? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2016, 14:06 |
|
Создание событий c#
|
|||
---|---|---|---|
#18+
PallarisSerega325, так а сам контрол на keydown подписан? private void InitializeComponent() { this.SuspendLayout(); // // MyControl // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Name = "MyControl"; this.Size = new System.Drawing.Size(244, 240); this.MyKeyDown += new System.Windows.Forms.KeyEventHandler(this.MyControl_KeyDown); this.ResumeLayout(false); } public partial class MyControl : UserControl { public MyControl() { InitializeComponent(); board = new char[columnCount, rowCount]; for (int i = 0; i < columnCount; i++) { for (int j = 0; j < rowCount; j++) board[i, j] = ' '; } pen = new Pen(foreColor, penWidth); this.BackColor = Color.White; caretThread = new Thread(new ThreadStart(ShowCaret)); caretThread.Start(); } public event System.Windows.Forms.KeyEventHandler MyKeyDown; protected void fireMyKeyDown(object sender, KeyEventArgs e) { if (MyKeyDown != null) MyKeyDown(sender, e); } public void MyControl_KeyDown(object sender, KeyEventArgs e) { MessageBox.Show(e.KeyCode.ToString()); // Например // if (e.Shift) fireMyKeyDown(sender, e); } } ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2016, 14:15 |
|
Создание событий c#
|
|||
---|---|---|---|
#18+
Serega325, Контрол-то надо подписывать на keydown, а не на mykeydown ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2016, 03:39 |
|
Создание событий c#
|
|||
---|---|---|---|
#18+
Не могу понять один базовый момент шарпа, а именно проверку на наличие события (if event!=null). Вот есть у меня событие в неком класе: public event NewMailEventHandler OnNewMailHandler; protected void OnNewMail(NewEmailEventArgs e) { IF (OnNewMailHandler!=null) OnNewMailHandler(this,e) }. То есть как осуществляется проверка что события не равно null? И потом я так понимаю вызывается делегат на котором построено событие ибо он имеет эти стандармых два параметра? Это в класе субскрайбера. В консумере же есть такая строка - classobject.OnNewMailHandler+=new EmailNotify.NewMailEventHandler(IHaveMail); Или наличие событие проверяется уже в ходе запуска этой строки из метода мейн: emailNotify.NotifyMail("Hello","Welcome to Events"); // void NotifyMail(string subject, string message){ NewEmailEventArgs e=new NewEmailEventArgs(subject,message); OnNewMail(e);} Последний клас, что наследует EventArgs имеет собственно поля и свойства: сабджект и меседж- на основе того есть ли они пустые (но их 2) и определяется наличие событие? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2017, 22:40 |
|
Создание событий c#
|
|||
---|---|---|---|
#18+
stutНе могу понять один базовый момент шарпа, а именно проверку на наличие события (if event!=null). Вот есть у меня событие в неком класе: public event NewMailEventHandler OnNewMailHandler; protected void OnNewMail(NewEmailEventArgs e) { IF (OnNewMailHandler!=null) OnNewMailHandler(this,e) }. То есть как осуществляется проверка что события не равно null? И потом я так понимаю вызывается делегат на котором построено событие ибо он имеет эти стандармых два параметра? Это в класе субскрайбера. В консумере же есть такая строка - classobject.OnNewMailHandler+=new EmailNotify.NewMailEventHandler(IHaveMail); Или наличие событие проверяется уже в ходе запуска этой строки из метода мейн: emailNotify.NotifyMail("Hello","Welcome to Events"); // void NotifyMail(string subject, string message){ NewEmailEventArgs e=new NewEmailEventArgs(subject,message); OnNewMail(e);} Последний клас, что наследует EventArgs имеет собственно поля и свойства: сабджект и меседж- на основе того есть ли они пустые (но их 2) и определяется наличие событие?беспредел, уже даже Enter отсутствует. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 07:33 |
|
Создание событий c#
|
|||
---|---|---|---|
#18+
fortibransa, нету на т/ф ентера ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 16:21 |
|
Создание событий c#
|
|||
---|---|---|---|
#18+
stutfortibransa, нету на т/ф ентераГм, у всех есть, а у тебя куда подевался. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2017, 07:11 |
|
Создание событий c#
|
|||
---|---|---|---|
#18+
Вот я несколько переделал с помощью ентера: Не могу понять один базовый момент шарпа, а именно проверку на наличие события Код: c# 1.
. Вот есть у меня событие в неком класе: Код: c# 1.
То есть как осуществляется проверка что события не равно null? И потом я так понимаю вызывается делегат на котором построено событие ибо он имеет эти стандармых два параметра? Это в класе субскрайбера. В консумере же есть такая строка - Код: c# 1.
Или наличие событие проверяется уже в ходе запуска этой строки из метода мейн: Код: c# 1. 2.
Последний клас, что наследует EventArgs имеет собственно поля и свойства: сабджект и меседж- на основе того есть ли они пустые (но их 2) и определяется наличие событие? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 16:31 |
|
|
start [/forum/topic.php?fid=20&fpage=39&tid=1399706]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 305ms |
total: | 435ms |
0 / 0 |