|
上代码:
public partial class Form1 : Form
{
public Form1(int code) { }
public Form1()
{
InitializeComponent();
}
public class A : Form1
{
public A()// : base(0)
{
base.InitializeComponent();
}
public void B()
{
base.textBox1.Text = "changed";
base.comboBox1.SelectedIndex = 0;
}
}
private void Form1_Load(object sender, EventArgs e)
{
new A().B();
}
}
注释掉的还有其他自己加的东西都是失败的尝试。 |
|
|
2分
#1 |
在一个窗体类的后台 添加一个类,并调用其本身的InitializeComponent(),这太奇葩了。 楼主的好奇指数 实在太高了。
|
|
1分
#2 |
回复1楼: 你把 A中的 base.InitializeComponent 这个删掉测试 |
|
2分
#3 |
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public TextBox MyTb1
{
get
{
return this.textBox1;
}
}
}
public class A : Form1
{
public void B()
{
this.MyTb1.Text = "changed";
}
}
|
|
5分
#4 |
另外,显然你也可以写
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
public class A : Form1
{
public void B()
{
this.textBox1.Text = "changed";
}
}
但是你需要打开 textBox1 控件的“属性”窗,将 Modifier 属性改为 public。 |
|
#5 |
回复4楼: 我可能没说清楚。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
new A().B();
MessageBox.Show("Form1.Handle: " + this.Handle.ToString());
}
}
public class A : Form1
{
public void B()
{
//MessageBox.Show("A.Handle: " + this.Handle.ToString());
MessageBox.Show("base.Handle: " + base.Handle.ToString());
}
}
获取到的窗体句柄是不同的,我估计是由于实例化 A 类的时候也调用了 Form1 的构造函数,所以 A 类中的 B 方法操作的并不是当前窗体的控件,而是另一个新窗体中的控件。 this.Show(); 之后却造成一直循环调用Form1和A类的情况,最后A中报错:创建窗体句柄失败。 |
|
2分
#6 |
回复5楼: 不要企图在form1里再实例化form1自身,会造成无限递归调用 |
|
3分
#7 |
|
|
#8 |
回复7楼: 我是想在A类中操作控件然后在Form1里看到结果。 |
|
5分
#9 |
public partial class Form1 : Form
{
public Form1(int code) { }
public Form1()
{
InitializeComponent();
}
public class A : Form1
{
//public A()
//{
// base.InitializeComponent();
//}
public void B()
{
base.textBox1.Text = "changed";
base.comboBox1.SelectedIndex = 0;
}
}
private void Form1_Load(object sender, EventArgs e)
{
//sender就是这个窗口
A a = sender as A;
if(a != null) a.B();
}
}
|
|
#10 |
回复9楼: 然而父类并不能强制转换为子类 |