Использование событий для TextBox, Label, Button Control внутри Design Surface

Может ли кто-нибудь помочь мне ответить на мой вопрос о том, как мы можем реализовать события щелчка для динамически генерируемого компонента в Designer.

Я упоминал, что класс DesignSurface (Extended) вернулся, вместе с классом DesignSurfaceManager (Extended) и демонстрацией конструктора форм![^] сайт

Я использую ниже фрагмент внутри

class MenuCommandServiceExt:IMenuCommandService

класс, но не получил никакого успеха.

if ((string)menuItem.Tag == "Label")
                {
                  var lbl1 = (Label)surface.CreateControl(typeof(Label),
                   new Size(300, 20), new Point(10, 80));

                  this.lbl1.Text = "Hello World by DesignSurfaceExt";
                  this.lbl1.Click += new EventHandler(btnclick_Click);
                  this.lbl1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lbl_MouseDoubleClick);   
                }

Я также пытался добиться этого путем создания пользовательского элемента управления для Label со всеми событиями, определенными внутри метки, и создания его с помощью приведенного выше фрагмента кода, но он также не работал. Ниже приведена логика, которую я использовал для контроля пользователя.

if ((string)menuItem.Tag == "Label")
                {
                  var lbl1 = (MyLabel)surface.CreateControl(typeof(MyLabel),
                   new Size(300, 20), new Point(10, 80)); 
                }

Пользовательский контроль

public class MyLabel : Label
    { 
     public MyLabel()
        {

            this.DoubleClick += new EventHandler(MyLabel_Click);
        }

 void MyLabel_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Clicked");
        }
.........
.....
...
}

Кроме того, я хочу сохранить / просмотреть свою пользовательскую форму, созданную в Powerful DesignSurface Designer. Как я могу этого достичь?

1 ответ

Вы просто приводите UserControl к типу MyLabel:

var lbl1 = (MyLabel)surface.CreateControl(typeof(MyLabel), new Size(300, 20), new Point(10, 80));

Таким образом, он не создает объект с помощью конструктора. Вы должны создать объект с помощью конструктора, а затем добавить к вашему объекту "поверхность".

MyLabel label1 = new MyLabel();
label1.DoubleClick += new EventHandler(MyLabel_Click);
surface.Controls.Add(label1);
}

void MyLabel_Click(object sender, EventArgs e)
{
MessageBox.Show("Clicked");
}

Надеюсь это поможет.

Другие вопросы по тегам