Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Как из класса размещать контролы на форму


Автор: transkriptsiya 19.1.2015, 15:51
вот так розмещаю лейблы на форму автоматом 

Код

 private void init_key()
        {
            keys = new Label[102];//разместить на форме 102 кнопки
            int key_w = panel44.Width / 10;  // ширина кнопки вычитается из ширины панели
            int key_h = panel44.Height / 11;

            for (int i = 0; i <= 101; i++)
            {
                keys[i] = new Label();
                keys[i].Location = new Point(i % 10 * key_w, i / 10 * key_h);
                keys[i].Size = new Size(key_w -3, key_h - 2);
                keys[i].Text = i.ToString();
              
                panel44.Controls.Add(keys[i]);
            }
        
        }


все отлично работает из класса програм, а как мне этот код перенести в отдельный класс? Переношу в отдельный клас и там он не видит мою панель на форме panel44. 

Автор: infarch 20.1.2015, 10:39
Передайте ссылку на панель в метод.

Автор: transkriptsiya 22.1.2015, 12:19
Цитата(infarch @ 20.1.2015,  10:39)
Передайте ссылку на панель в метод.

спасибо.


Автор: transkriptsiya 22.1.2015, 15:42
Код

Label[] keys;

        public void init_key(Panel pl) //передаю в качестве параметров панель из основной формы
        {
            keys = new Label[102];
            int key_w = pl.Width / 10;  // ширина кнопки вычитается из ширины панели
            int key_h = pl.Height / 11;

            for (int i = 0; i <= 101; i++)
            {
                keys[i] = new Label();
                keys[i].Location = new Point(i % 10 * key_w, i / 10 * key_h);
                keys[i].Size = new Size(key_w, key_h);
              
                keys[i].MouseHover += new System.EventHandler(this.label_mouse_hover);//??
              
                pl.Controls.Add(keys[i]);
            }

        }


Подскажите, еще. Вот я из класса динамически на форму размещаю лейблы - все ок. А как мне этим лейблам еще и события назначать - это через делегаты делается?

Автор: sgrey 22.1.2015, 18:19
Цитата(transkriptsiya @ 22.1.2015,  15:42)
Код

Label[] keys;

        public void init_key(Panel pl) //передаю в качестве параметров панель из основной формы
        {
            keys = new Label[102];
            int key_w = pl.Width / 10;  // ширина кнопки вычитается из ширины панели
            int key_h = pl.Height / 11;

            for (int i = 0; i <= 101; i++)
            {
                keys[i] = new Label();
                keys[i].Location = new Point(i % 10 * key_w, i / 10 * key_h);
                keys[i].Size = new Size(key_w, key_h);
              
                keys[i].MouseHover += new System.EventHandler(this.label_mouse_hover);//??
              
                pl.Controls.Add(keys[i]);
            }

        }


Подскажите, еще. Вот я из класса динамически на форму размещаю лейблы - все ок. А как мне этим лейблам еще и события назначать - это через делегаты делается?

да, через делегаты. Передаёшь делегат в функцию и добавляешь его в нужное событие

Автор: transkriptsiya 24.1.2015, 00:37
Что-то не получается.
 есть событие 

Код

private void label_mouse_hover(object sender, EventArgs e)
        {
            ((Label)sender).ForeColor = Color.Red;
                       
        }



1. в основном классе делаю делегат под это событие

 public delegate void My_del(object sender, EventArgs e);
а дальше непонятно



Автор: sgrey 24.1.2015, 05:04
Цитата(transkriptsiya @ 24.1.2015,  00:37)
Что-то не получается.
 есть событие 

Код

private void label_mouse_hover(object sender, EventArgs e)
        {
            ((Label)sender).ForeColor = Color.Red;
                       
        }



1. в основном классе делаю делегат под это событие

 public delegate void My_del(object sender, EventArgs e);
а дальше непонятно

в основном классе создаёшь переменную класса 
Код

My_del func = label_mouse_hover;

в том классе, где находятся все Label 
делаешь функцию, что-то вроде
Код

public void assignCallback(My_del p)
{
    for(int i = 0; i < keys.Length; ++i)
    {
        keys[i].MouseOver += new EventHandler(p);
    }
}

передаёшь туда созданный в основном классе делегат и всё. 

Автор: sgrey 24.1.2015, 05:41
неплохая статья со ссылками про делегаты http://habrahabr.ru/post/198694/

Автор: transkriptsiya 24.1.2015, 16:40
Цитата(sgrey @ 24.1.2015,  05:04)
Цитата(transkriptsiya @ 24.1.2015,  00:37)
Что-то не получается.
 есть событие 

Код

private void label_mouse_hover(object sender, EventArgs e)
        {
            ((Label)sender).ForeColor = Color.Red;
                       
        }



1. в основном классе делаю делегат под это событие

 public delegate void My_del(object sender, EventArgs e);
а дальше непонятно

в основном классе создаёшь переменную класса 
Код

My_del func = label_mouse_hover;

в том классе, где находятся все Label 
делаешь функцию, что-то вроде
Код

public void assignCallback(My_del p)
{
    for(int i = 0; i < keys.Length; ++i)
    {
        keys[i].MouseOver += new EventHandler(p);
    }
}

передаёшь туда созданный в основном классе делегат и всё.

Чудеса на виражах - все летает. Гранд мерси smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)