这个问题有三个文件:
Options.cs
(选项值的数据存储)MainWindow.cs
(程序的主窗口,它的外观根据 Options 数据存储区中的选项进行修改 - 一旦该类被标记为对象)OptionsWindow.cs
Options
(用户设置选项值的子窗口,当用户按下窗口内的按钮时 ,此窗口将更改保存到数据存储中)
我想要做的是在 C# 中的主窗口窗体和子窗体窗体之间共享数据。我的主窗口被称为MainWindow
子窗口OptionsWindow
。
我有一个名为Options
. 这是一个存储各种用户选项的对象。(有些是类型int
和bool
)这些选项MainWindow
用于外观目的。
因此,用户在 中进行更改,OptionsWindow
这些变量更改保存在userOptions
类型的对象中Options
在OptionsWindow
.
我这样做是因为我需要一种简单易行的方法来在子窗口中移动设置数据,将该数据保存到一个对象中,然后在MainWindow
为什么我没有在userOptions
里面声明对象MainWindow
?MainWindow
因为除非我制作public
每个人都说永远不会做的对象,否则您无法访问声明的任何数据。所以我尝试制作userOptions
内部制作对象OptionsWindow
并通过属性公开变量(数据)。
这行得通。我可以从两者访问和设置OptionsWindow
属性MainWindow
。
有什么问题?好吧,optionsWindow.Show();
只能使用一次,之后 C# 将不会让它再次工作,所以由于某种原因它只能使用一次。此外,一旦表单关闭,似乎对象userOptions
正在被销毁。
MainWindow.cs
public partial class MainWindow : Form
{
OptionsWindow optionsWindow = new OptionsWindow();
optionsWindow
然后声明一个userOptions
类型的对象Options
。这是数据存储。剩下的optionsWindow
就是获取用户数据并将这些数据添加到选项数据存储中
public partial class OptionsWindow : Form
{
Options userOptions = new Options();
public bool AllowToolTip
{
get { return userOptions.AllowToolTips; }
set { userOptions.AllowToolTips = value; }
}
我这样称呼optionsWindow
:(请注意,由于异常错误,这只能工作一次,显然 C# 不能重用子对象。这真的让我很困惑)
private void optionsToolStripMenuItem1_Click(object sender, EventArgs e)
{
try
{
optionsWindow.Show();// this stops working after first call
}
catch { };
}
我已经在这段代码上工作了大约 4 个小时,尝试了一切。
我想要的只是拥有各种类型的用户选项的数据存储,并使用选项窗口来设置选项和主窗口来读取选项。
这就是我想做的。
将变量设置到子窗口内的共享数据存储中,并在主窗口中访问该数据存储。
数据存储是一个对象。
这是可以修复的吗?或者有没有更好的方法从子窗口和主窗口都可以访问的子窗口中获取数据。
编辑:我最终将数据存储公开,因为代码变得过于复杂。