上代码: 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楼: 然而父类并不能强制转换为子类 |