由于我想将所有的功能都显示到一个界面上(也就是使用嵌入主窗体的方式完成),就有几个地方需要直接调用Form1的函数。
1.跨窗口调用函数的实现
在Form1中设置一个静态变量,使这个静态变量等于this,就能让其他窗口引用。
Form1.cs:
public static Form1 frm1; //定义一个静态变量
public Form1()
{
InitializeComponent();
frm1 = this; //引用this,可以供其他窗口调用
}
在其他窗口进行调用的方法:先将事件由 private 改为 public,就可以直接调用了。
Form1.frm1.Button;
Form1.frm1.Method();
但是实际上直接将私有函数变成公有,会破坏函数的封装,不过目前还没学会怎么改进,暂时先使用这种方式。
2.两个用到跨窗口函数调用的地方
①在传输损耗计算界面,完成参数对于传输损耗影响的显示
这是在Hata模型计算中,查看传输距离以及基站天线高度对于传输损耗影响曲线的代码:
private void Btn_Yes_Click(object sender, EventArgs e)
{
if (Rad_d.Checked)
{
Form1.frm1.Lbl_55_Click_1(sender, e);
}
else if (Rad_ht.Checked)
{
Form1.frm1.Lbl_56_Click_1(sender, e); ;
}
}
②在模型选择界面,完成传输损耗计算的选择与显示
这是其中关于选择Walfisch-Ikegami模型的代码
if (Rad_d2.Checked)
{
if (MessageBox.Show("将选择Walfisch-Ikegami模型", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.OK)
{
Form1.frm1.Lbl_44_Click_1(sender, e);
}
else
{
Form1.frm1.Lbl_41_Click_1(sender, e);
}
}
3.关于工具栏快捷方式的实现
由于工具栏就在Form1,可以直接进行函数的调用,不需要跨窗口,就不用进行静态变量定义。
比如说,工具栏设定:Hata模型传输损耗的计算,其实与界面中其他控件的功能一样,就可以调用函数:
private void hataToolStripMenuItem1_Click(object sender, EventArgs e)
{
this.Lbl_42_Click_1(sender, e);
}