问题是这样的,我设计了一个窗体Form1,在这个窗体上放置了很多控件,发现后面的窗体要实现的功能跟Form1比较类似,于是就是用了继承窗体,让Form2继承自Form1。文件就接着来了,当我想在Form2中对继承过来的控件进行操作的时候,例如点Form2中的button按钮,这样form1窗体的button按钮的事件也会执行一次。我想知道怎样才能实现form2窗体的事件只执行一次呢。关键是Form2中的事件和Form1中的控件的事件比较类似,又不想重新写这些代码,是不是可以新建一个类,然后将这些方法作为这个新建类的静态方法,然后从Form1和Form2中分别调用呢,这样应该能够实现。但是我有怀疑这些事件还是会在Form1和Form2中各执行一次。应该是父类和之类方法调用方面的问题,是不是要用什么override来覆盖掉父类的方法呢。
ps:我将使用到的Form1窗体的控件的modify属性由原来的private转换成public了。
请各位高手指教。
ps:我将使用到的Form1窗体的控件的modify属性由原来的private转换成public了。
请各位高手指教。
{
public void test()
{
Console.WriteLine("base");
}
} public class Child: Base
{
public new void test()
{
Console.WriteLine("child");
}
}
static void Main(string[] args)
{
Child c= new Child();
c.test();
((Base)d).test();
}
解决的办法是弄一个抽象基类Form0,不绑定事件,再分别继承出Form1和Form2绑定不同的事件即可
楼上的那位大侠居然在回贴中使用了嘲笑的字眼,有这么严重么?不懂就问会让人嘲笑?正所谓不耻下问乃君子!
{
public System.Windows.Forms.Button button1 = new System.Windows.Forms.Button();
public Form1()
{
button1.Text = "Button1";
this.Controls.Add(button1);
button1.Click += new System.EventHandler(button1_Click);
} protected virtual void button1_Click(object sender, System.EventArgs e)
{
System.Windows.Forms.MessageBox.Show("Form1.button1 clicked.");
}
}public class Form2 : Form1
{
protected override void button1_Click(object sender, System.EventArgs e)
{
//base.button1_Click(sender, e);//调用父类方法,注释或删除
System.Windows.Forms.MessageBox.Show("Form2.button1 clicked.");
}
}给你例子,看看就明白了。
{
public System.Windows.Forms.Button button1 = new System.Windows.Forms.Button();
public Form1()
{
button1.Text = "Button1";
this.Controls.Add(button1);
button1.Click += new System.EventHandler(button1_Click);
} protected virtual void button1_Click(object sender, System.EventArgs e)
{
System.Windows.Forms.MessageBox.Show("Form1.button1 clicked.");
}
}public class Form2 : Form1
{
protected override void button1_Click(object sender, System.EventArgs e)
{
//base.button1_Click(sender, e);//调用父类方法,注释或删除
System.Windows.Forms.MessageBox.Show("Form2.button1 clicked.");
}
}