0

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

 public partial class Schedule_Tasks : Form
{

    readonly Schedules schedules;

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

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

new Schedules().Show();

所以很明显,当我声明这一点时,我会在 Schedules 之后的括号中添加类似“this”的内容,但如果在“主机”表单之外调用表单,则这不起作用。我只是想现在有什么我缺少或可以改变的吗?如果任何部分不清楚,请告诉我,这有点难以解释。任何帮助表示赞赏,干杯。

编辑

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

 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;

    }
4

1 回答 1

0

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

public Folder_Browser(Back_up_Options host)

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

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

new Folder_Browser(null).Show();

但是,您需要确保每次使用该成员时都检查backOptions成员是否为空引用。例如:

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

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

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

于 2013-11-11T07:42:42.300 回答