C# 被按钮访问时返回null的Get Set

C# 被按钮访问时返回null的Get Set,c#,button,get,set,C#,Button,Get,Set,我可能遗漏了一些简单的内容,但已经处理了几个小时,我无法让方法返回非null的内容。当我跨过这个过程时,getDir1将接受类swSheetFormatCycle.Form1.FolderUpdate的值,但是getDir1.SwDir保持为null,所以SwDir保持为null。button方法不会像我这样设置swDir或swTemplate吗 // Get-Set Class public class FolderUpdate { private string swDir;

我可能遗漏了一些简单的内容,但已经处理了几个小时,我无法让方法返回非null的内容。当我跨过这个过程时,getDir1将接受类swSheetFormatCycle.Form1.FolderUpdate的值,但是getDir1.SwDir保持为null,所以SwDir保持为null。button方法不会像我这样设置swDir或swTemplate吗

   // Get-Set Class
public class FolderUpdate
{
    private string swDir;
    public string SwDir
    {
        get {return swDir;}
        set {swDir = value;}
    }

    private string swTemplate;
    public string SwTemplate
    {
        get {return swTemplate;}
        set {swTemplate = value;}
    }
}

private void btnTemBrow_Click(object sender, EventArgs e)
{
    OpenFileDialog tempBrowse = new OpenFileDialog();
    DialogResult result = tempBrowse.ShowDialog();
    string tempText = tempBrowse.FileName;
    txtTemp.Text = tempText;
    // Setting the template field
    FolderUpdate temUpd = new FolderUpdate();
    temUpd.SwTemplate = tempText;
}

private void btnDirBrow_Click(object sender, EventArgs e)
{
    FolderBrowserDialog dirBrowse = new FolderBrowserDialog();
    DialogResult result = dirBrowse.ShowDialog();
    string dirText = dirBrowse.SelectedPath;
    txtDir.Text = dirText;
    // Setting the directory field
    FolderUpdate dirUpd = new FolderUpdate();
    dirUpd.SwDir = dirText;
}

// Get the directory set by the button method
swSheetFormatCycle.Form1.FolderUpdate getDir1 = new swSheetFormatCycle.Form1.FolderUpdate();
string swDir = getDir1.SwDir;

// Get the template set by the button method
swSheetFormatCycle.Form1.FolderUpdate getDir2 = new swSheetFormatCycle.Form1.FolderUpdate();
string swTemplate = getDir2.SwTemplate;

您的按钮事件正在创建FolderUpdate类的新实例,然后没有对该对象执行任何操作,并且在方法调用结束时放弃该对象

您的//获取按钮方法代码设置的目录 正在创建新实例,因此它们也将为空

将FolderUpdate实例附加到表单本身,以便可以引用它

public class FolderUpdate
{
    .... 
}


public FolderUpdate Folders { get; set; }

private void btnTemBrow_Click(object sender, EventArgs e)
{
     ...
     Folders.SwTemplate = tempText;
}

private void btnDirBrow_Click(object sender, EventArgs e)
{
     ...
     Folders.SwDir = dirText;
}


// Then when you are reading them
var folders = swSheetFormatCycle.Form1.Folders;
string swDir = folders.SwDir;
string swTemplate = folders.SwTemplate;

由于这是一个GUI,请告诉我们正在发生的事情的确切工作流程。最后四行代码何时执行还不清楚。另外,请记住,按钮单击方法中几乎所有的变量都是本地变量,它们将在方法末尾被垃圾收集。所以他们现在基本上什么也没做。@music_coder我有两个.cs文档在同一个解决方案中。一个叫做Program.cs,另一个叫做Form1.cs。我的Program.cs代码在没有GUI的情况下运行良好。我创建了一个表单,当用户单击浏览按钮时,文件/文件夹对话框将打开,他们选择的任何路径都将被放置到相应的文本框中。我有目前硬编码的模板和目录。其思想是让用户使用GUI,并将模板和目录字符串路径传递给程序。gets的调用来自Program.cs。很抱歉延迟。不幸的是,我现在太忙了,无法提供详细的帮助,但根据您对@Steve的评论,我认为您需要与教授或其他有经验的程序员坐下来,以纠正您对O.O.的一些误解。例如,编程时,对文件夹使用static,即使它以某种方式起作用,也不是正确的方法。起初,我自己也在与GUI进行不必要的斗争,因为我在O.O问题上没有得到帮助。对不起,我不能再多做了!坚持下去,你会发现这一点,更重要的是,提高你对概念的理解。@musical_coder好的,我在C只呆了大约两周,因为我无法用python完成我想要的一切。我通过阅读这里的内容,几本书,一些代码片段。。。谢谢你的建议。谢谢你的投入,感觉越来越近了。然而,有一个问题。var folders=swSheetFormatCycle.Form1.folders需要对象引用。所以我可以做以下事情:我可以公开静态FolderUpdate文件夹{get;set;},然后它将允许该代码。但是,在任一按钮上单击Folders.SwTemplate=tentext;或Folders.SwDir=dirText;在选择文件或文件夹路径时导致空引用错误。我尝试创建一个Form1的新实例和其他各种可能是错误的方法。。。它们在按下按钮时都以错误告终。public static FolderUpdate Folders=new FolderUpdate;那么生活是美好的。谢谢你的帮助。静态字段可以工作,但是你也可以在oninit中初始化它,或者让属性getter setter包装私有字段。这允许您在setter-getter中添加额外的清理逻辑,而无需修改实现的重置。FolderUpdate _folders=新FolderUpdate;public FolderUpdate Folders{get{return}Folders;}set{{Folders=value;}-或在init-init{this.Folders=new FolderUpdate;}内。感谢您提供了另一种方法。