Использование событий для 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");
}
Надеюсь это поможет.