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我已经添加了我正在使用的代码。我的意思是,我刚刚从另一个被“托管”的表单中获取了元素,我不知道还有什么更好的方法。