C# 跨窗口调用函数

由于我想将所有的功能都显示到一个界面上(也就是使用嵌入主窗体的方式完成),就有几个地方需要直接调用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);
}

猜你喜欢

转载自blog.csdn.net/qq_33523925/article/details/88672277