0

谁能帮我回答我的问题,即我们如何在 Designer 中为动态生成的组件实现点击事件。

我曾提到DesignSurface(扩展)类又回来了,还有一个 DesignSurfaceManager(扩展)类和一个表单设计器演示![^] 网站

我在里面使用了下面的代码片段

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);   
                }

我还尝试通过使用标签内定义的所有事件为标签创建用户控件并通过上面的代码片段创建它来实现它,但它也没有工作。下面是我用于用户控制的逻辑。

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");
        }
.........
.....
...
}

另外,我想保存/查看我在强大的 DesignSurface Designer 中构建的自定义表单。我怎样才能做到这一点?

4

1 回答 1

-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");
}

希望这可以帮助。

于 2017-11-03T09:47:49.727 回答