powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Создание событий c#
13 сообщений из 13, страница 1 из 1
Создание событий c#
    #39290171
Serega325
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте форумчане, создал собственный контрол "MyControl", подскажите пожалуйста возможно ли в C# создать свое событие обработки нажатия клавиши на контроле, т.е. должно быть что-то вроде этого this.MyKeyDown += OnMyEventKey;
...
Рейтинг: 0 / 0
Создание событий c#
    #39290188
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serega325,

можно
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
     public partial class MyControl : UserControl
    {
        public MyControl()
        {
            InitializeComponent();
        }

        public event EventHandler MyKeyDown;

        protected void fireMyKeyDown(object sender, KeyEventArgs e)
        {
            if (MyKeyDown != null) MyKeyDown(sender, e);
        }

        private void MyControl_KeyDown(object sender, KeyEventArgs e)
        {
            // Например
            if (e.Shift) fireMyKeyDown(sender, e);
        }
    }
...
Рейтинг: 0 / 0
Создание событий c#
    #39290209
Serega325
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилSerega325,

можно
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
     public partial class MyControl : UserControl
    {
        public MyControl()
        {
            InitializeComponent();
        }

        public event EventHandler MyKeyDown;

        protected void fireMyKeyDown(object sender, KeyEventArgs e)
        {
            if (MyKeyDown != null) MyKeyDown(sender, e);
        }

        private void MyControl_KeyDown(object sender, KeyEventArgs e)
        {
            // Например
            if (e.Shift) fireMyKeyDown(sender, e);
        }
    }


Выдает ошибку
Error 1 No overload for 'MyControl_KeyDown' matches delegate 'System.EventHandler'
Заменил EventHandler на KeyEventHandler ошибки нет, но событие не срабатывает.
...
Рейтинг: 0 / 0
Создание событий c#
    #39290326
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serega325Заменил EventHandler на KeyEventHandler ошибки нет, но событие не срабатывает.
правильно заменил.

До fireMyKeyDown дело доходит?
...
Рейтинг: 0 / 0
Создание событий c#
    #39290328
Serega325
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил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);
}
...
Рейтинг: 0 / 0
Создание событий c#
    #39290331
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serega325,

так а сам контрол на keydown подписан?
...
Рейтинг: 0 / 0
Создание событий c#
    #39290333
Serega325
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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);
}
}
...
Рейтинг: 0 / 0
Создание событий c#
    #39290699
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serega325,

Контрол-то надо подписывать на keydown, а не на mykeydown
...
Рейтинг: 0 / 0
Создание событий c#
    #39501557
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) и определяется наличие событие?
...
Рейтинг: 0 / 0
Создание событий c#
    #39501602
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 отсутствует.
...
Рейтинг: 0 / 0
Создание событий c#
    #39501958
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortibransa,
нету на т/ф ентера
...
Рейтинг: 0 / 0
Создание событий c#
    #39502265
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stutfortibransa,
нету на т/ф ентераГм, у всех есть, а у тебя куда подевался.
...
Рейтинг: 0 / 0
Создание событий c#
    #39523386
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот я несколько переделал с помощью ентера:
Не могу понять один базовый момент шарпа, а именно проверку на наличие события
Код: c#
1.
 (if event!=null) 

.
Вот есть у меня событие в неком класе:
Код: c#
1.
 public event NewMailEventHandler OnNewMailHandler; protected void OnNewMail(NewEmailEventArgs e) { IF (OnNewMailHandler!=null) OnNewMailHandler(this,e) }. 

То есть как осуществляется проверка что события не равно null? И потом я так понимаю вызывается делегат на котором построено событие ибо он имеет эти стандармых два параметра? Это в класе субскрайбера. В консумере же есть такая строка -
Код: c#
1.
 classobject.OnNewMailHandler+=new EmailNotify.NewMailEventHandler(IHaveMail);


Или наличие событие проверяется уже в ходе запуска этой строки из метода мейн:
Код: c#
1.
2.
 emailNotify.NotifyMail("Hello","Welcome to Events");
 void NotifyMail(string subject, string message){ NewEmailEventArgs e=new NewEmailEventArgs(subject,message); OnNewMail(e);} 


Последний клас, что наследует EventArgs имеет собственно поля и свойства: сабджект и меседж- на основе того есть ли они пустые (но их 2) и определяется наличие событие?
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Создание событий c#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]