在Design Surface中使用TextBox,Label,Button Control的事件

时间:2017-11-03 09:09:42

标签: c# winforms gui-designer design-surface

任何人都可以帮我回答我的问题,我们如何在Designer中为动态生成的组件实现点击事件。

我已经提到了The DesignSurface (Extended) Class is Back, Together with a DesignSurfaceManager (Extended) Class and a Form Designer Demo! [^]网站

我在

中使用了以下代码段
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 个答案:

答案 0 :(得分:-1)

您只需将UserControl转换为MyLabel:

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

因此,它不会通过构造函数创建对象。 您应该通过构造函数创建一个对象,然后添加到您的" surface"对象

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

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

希望这有帮助。