-3

我从另一个可用于我的 Game1(主)类的类的函数中获取一个变量,这真是太棒了。具体来说,我想从 SetWindowSize.cs 中的 SaveData 函数中获取宽度和高度,并在 Game1.cs 的 ReadSettings 中使用它。

我得到错误

“ShovelShovel.SetWindowSize”不包含“高度”的定义。“宽度”也一样。

Game1.cs(仅限函数)

protected void ReadSettings()
{
    try
    {
        if (File.Exists(SetWindowSize.savePath))
        {
            using (FileStream fileStream = new FileStream(SetWindowSize.savePath,
                                                          FileMode.Open))
            {
                using (BinaryReader binaryReader = new BinaryReader(fileStream))
                {
                    SetWindowSize.width = binaryReader.ReadInt32();
                    SetWindowSize.height = binaryReader.ReadInt32();
                }
            }
        }
    }
    catch
    {
    }
}

设置窗口大小.cs

namespace ShovelShovel
{
            protected void ReadSettings()
    {
        try
        {
            if (File.Exists(savePath))
            {
                using (FileStream fileStream = new FileStream(savePath, FileMode.Open))
                {
                    using (BinaryReader binaryReader = new BinaryReader(fileStream))
                    {
                        var windowSize = WindowSizeStorage.ReadSettings();

                        WindowSize.Width = windowSize.Width;
                        WindowSize.Height = windowSize.Height;
                    }
                }
            }
        }
        catch
        {
        }
    }

非常感谢任何可以帮助我的人,我真的很感激。

4

4 回答 4

1

这可能会奏效:

public class WindowSize
{
    public int Width { get; set; }
    public int Height { get; set; }
}

public static class WindowSizeStorage
{
    public static string savePath = "WindowSize.dat";

    public static WindowSize ReadSettings()
    {   
        var result = new WindowSize();
        using (FileStream fileStream = new FileStream(SetWindowSize.savePath, FileMode.Open))
        {
            using (BinaryReader binaryReader = new BinaryReader(fileStream))
            {
                result.Width = binaryReader.ReadInt32();
                result.Height = binaryReader.ReadInt32();
            }
        }

        return result;
    }

    public static void WriteSettings(WindowSize toSave)
    {
        using (BinaryWriter binaryWriter = new BinaryWriter(File.Open(savePath, FileMode.Create)))
        {
            binaryWriter.Write(toSave.Width);
            binaryWriter.Write(toSave.Height);
        }
    }
}

用法:

// Read
var windowSize = WindowSizeStorage.ReadSettings();

myForm.Width = windowSize.Width;
myForm.Height = windowSize.Height;

// Write
var windowSize = new WindowSize { Width = myForm.Width, Height = myForm.Height };

WindowSizeStorage.WriteSettings(windowSize);

请注意,写这样的答案(呈现所有代码)不是常见的方式;我只是觉得。我试图展示一些面向对象的设计原则,每个类都做自己的事情。

如果您想在方法之间传输复杂对象(即不止一种原始类型),您通常会创建一个数据传输对象 (DTO),例如WindowSize.

该类具有存储和检索此类对象WindowSizeStorage的唯一责任。WindowSize从您的代码中,您只需告诉存储存储或检索您希望的设置。

但正如我从您的问题和评论中得知的那样,您没有太多使用 C# 的经验,或者可能根本没有任何编程经验。尝试学习一两个教程,以便您了解如何将您的想法转化为代码。

于 2012-12-10T10:56:36.377 回答
0

您不能访问该函数之外的函数变量。为了实现这些定义静态变量,将高度和宽度分配给静态变量,然后在任何你想要的地方访问它。

于 2012-12-10T10:51:14.890 回答
0

函数的目的不是存储和公开变量。如果变量的范围不够宽,您将无法访问它们。在您的情况下,您应该通过将它们存储在类中并将它们公开,以某种方式公开它们,例如:

class SetWindowSize
{
    public const string savePath = "file.dat";

    public int width {get; set; }
    public int height {get; set; }

    public static void SaveData(string width, string height)
    {            
        using (BinaryWriter binaryWriter = new BinaryWriter(File.Open(savePath, FileMode.Create)))
        {
            binaryWriter.Write(width);
            binaryWriter.Write(height);
            SetWindowSize.width = width;
            SetWindowSize.height = height;
        }
    }
}
}

这远非最佳,但它确实有效。

于 2012-12-10T10:53:55.100 回答
0

您的 SetWindowSize 类不包含宽度或高度成员。您可以将它们添加为属性:

public class SetWindowSize
{
// other stuff
public int Height {get;set;}
public int Width {get;set;}
// other stuff
}

然后您可以使用 SetWindowSize 实例访问它们:

SetWindowSize sws = new SetWindowSize();
sws.Height = 512;
sws.Width = 512;
于 2012-12-10T10:54:03.900 回答