Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从其他窗体打开新的Windows窗体_C#_Forms_Host - Fatal编程技术网

C# 从其他窗体打开新的Windows窗体

C# 从其他窗体打开新的Windows窗体,c#,forms,host,C#,Forms,Host,现在,在任何人将这个问题标记为重复问题之前,我想说我的问题与其他问题不同。我试图从另一个表单打开一个现有表单,但是我遇到了一些问题,因为我已经将一些表单设置为“宿主”其他表单(在它们之间传递变量)。我的意思是: public partial class Schedule_Tasks : Form { readonly Schedules schedules; public Schedule_Tasks(Schedules host) { this.s

现在,在任何人将这个问题标记为重复问题之前,我想说我的问题与其他问题不同。我试图从另一个表单打开一个现有表单,但是我遇到了一些问题,因为我已经将一些表单设置为“宿主”其他表单(在它们之间传递变量)。我的意思是:

 public partial class Schedule_Tasks : Form
{

    readonly Schedules schedules;

    public Schedule_Tasks(Schedules host)
    {
        this.schedules = host;
        InitializeComponent();
    }
在这段代码中,我试图从Schedules表单中获取一些变量的值,并将其放入Schedule_Tasks表单中。所以我使用了“主机”系统。到目前为止,这种方法工作得很好,但当我试图从另一个不是“托管”的表单打开特定表单时,问题就出现了。例如,使用:

new Schedules().Show();
所以很明显,当我声明这一点时,我会在日程表后面的括号中加上类似“this”的内容,但如果在“host”窗体之外调用该窗体,则这不起作用。我只是想问一下,我有什么遗漏或可以改变的吗?如果有什么地方不清楚,请告诉我,这有点难以解释。谢谢你的帮助,干杯

编辑

下面是我正在使用的代码:

 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;

    }
您(
文件夹\u浏览器
)表单的构造函数声明为

public Folder_Browser(Back_up_Options host)
这意味着您无法将
Schedual\u Tasks
实例作为
host
参数传递,因为无法将
Schedual\u Tasks
对象转换为
Back\u Options
对象。编译器检测到这一点并创建错误消息

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

new Folder_Browser(null).Show();
但是,您需要确保每次使用时都检查
backOptions
成员的空引用。例如:

if(backOptions != null)
{
    deviceSel = backOptions.deviceSel;
}
else 
{
    deviceSel = null;
}
这反过来意味着您每次使用它时都需要检查
deviceSel
是否为null,以此类推


当然,在没有“主机”的情况下使用表单是完全可能的。如果您的代码需要一个“主机”,那么它将失败。

我认为您不能
新计划()可以在实例化后调用对象方法,比如说
myForm=newschedules()
myForm.Show()但是我想我还不知道你所说的来自另一个没有托管的表单的
是什么意思?最好将大部分代码(如果不是全部的话)放在这里,这样我们就可以看到整个情况。时间表也是一个
表单
,对吗?当你谈到发生的问题时,问题是什么?编译时错误或运行时异常?
schedules.Show()
不起作用?请您再添加一些代码,以便我们了解实际问题是什么。@Edper我已经添加了我正在使用的代码。我的意思是,我刚刚从另一个被“托管”的表单中获取了元素,我不知道还有什么更好的方法。