从另一个表单打开新的Windows窗体

时间:2013-11-11 07:12:25

标签: c# forms host

现在在任何人去之前将此问题标记为重复,我想说我的问题与其他问题不同。我试图从另一个表单中打开一个现有的表单,但是我已经设置了一些表单来帮助我解决问题。其他(在它们之间传递变量)。这就是我的意思:

 public partial class Schedule_Tasks : Form
{

    readonly Schedules schedules;

    public Schedule_Tasks(Schedules host)
    {
        this.schedules = host;
        InitializeComponent();
    }

因此,在这段代码中,我试图将一些变量的值从Schedules表单中获取到Schedule_Tasks表单中。所以我已经使用了主持人'系统。到目前为止,这种方法工作正常,但是当我尝试打开一个特定的表单时,我的问题就出现了,而另一个表单并不是托管的。例如使用:

new Schedules().Show();

很明显,当我宣布这一点时,我会提出类似“这样的事情”。在时间表之后的括号中,但如果在“主持人”之外调用表单,那么该功能不起作用。形成。我现在只是想有一些我不知道或可以改变的东西吗?如果有任何部分不清楚,请告诉我,这有点难以解释。任何帮助表示赞赏,干杯。

修改

这是我现在正在使用的代码:

 public partial class Schedual_Tasks : Form
{



    readonly Scheduals scheduals;
    public string selectedDevice;
    public string getPath;
    public string totalPath;


    public Schedual_Tasks(Scheduals host)
    {
        this.scheduals = host;
        InitializeComponent();
        selectedDevice = scheduals.itemSelected;
    }

    private void Schedual_Tasks_Load(object sender, EventArgs e)
    {

    }

    private void changeDirectory_Click(object sender, EventArgs e)
    {
        new Folder_Browser(this).Show(); //Error Occurs here
    }
}

这是Folder_Browser的构造函数,它是我尝试调用的表单:

 readonly Back_up_Options backOptions;
    public string deviceSel;

    public Folder_Browser(Back_up_Options host)
    {
        InitializeComponent();
        this.backOptions = host;
        deviceSel = backOptions.deviceSel;

    }

1 个答案:

答案 0 :(得分:0)

您的(Folder_Browser)表单的构造函数声明为

public Folder_Browser(Back_up_Options host)

这意味着您无法将Schedual_Tasks实例作为host参数传递,因为无法将Schedual_Tasks对象转换为Back_up_Options对象。编译器检测到此情况并创建错误消息。

如果您无法传递host参数,则可以改为null

new Folder_Browser(null).Show();

但是,您需要确保检查 backOptions成员每次使用 null引用。例如:

if(backOptions != null)
{
    deviceSel = backOptions.deviceSel;
}
else 
{
    deviceSel = null;
}

这反过来意味着每次使用时都需要检查deviceSel是否为null等等。

当然,在没有“主持人”的情况下使用您的表格根本不可能。如果您的代码需要“主机”,则会失败。