C#和VB有一个很大的区别,VB可以在窗体2直接调用窗体1的控件,但是C#却不能,可能是出于安全考虑,但同时也给使用带来了极大的不便。
于是查阅很多资料,加之理解,总结于下:
目的:窗体2取值窗体1控件的内容:
首先,在窗体1定义如下控件属性:
public FlexCell.Grid Grid //FlexCell是一款收费控件 { get { return this.gd_SPEC;//gd_SPEC是自定义控件名称 } }
在窗体1事件中,显示窗体2
private void 参数预览ToolStripMenuItem_Click(object sender, EventArgs e) { SpecView svForm = new SpecView(this); svForm.ShowDialog(); }
在窗体2中,定义窗体名称:
private FormMain fm; public SpecView(FormMain f) //FormMain是主窗体,SpecView是副窗体 { InitializeComponent(); fm = f; }
然后就可以直接调用窗体1的控件属性了,调用方式:
string s =fm.Grid.Cell(2,2).Text; MessageBox.Show(s);
虽然复杂了一点,但是还是能用的,总比设置静态变量要好用。
原文:https://www.cnblogs.com/Fpack/p/15334859.html