【问题标题】:How to pass variables between Forms and Pages如何在表单和页面之间传递变量
【发布时间】:2018-08-30 19:54:25
【问题描述】:

在我的项目 (WPF) 中,有一个表单(其中声明了一个对象),其中包含一个框架,该框架根据单击的按钮显示不同的页面。 在一个页面中,我拖动一个文件并获得路径。如何将路径返回到主窗体,以便可以将其“发送”到对象? (然后将由表单中的其他函数使用)

主窗体的(部分)代码

    CSV csv = new CSV();
    public MainWindow()
    {
        InitializeComponent();
        Main.Content = new LoadCSVPage();
    }
    public MainWindow(string path)
    {
        InitializeComponent();
        csv.SetLocation(path);
    }

LoadCSV 页面代码

public LoadCSVPage()
    {
        InitializeComponent();
    }
    private void LoadCSV_DragEnter(object sender, DragEventArgs e)
    {
        string filePath = "";
        string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
        foreach (string file in files)
        {
            filePath = file;
        }
        MainWindow main = new MainWindow(filePath);
        main.Show();
    }

我明白缺少什么!将变量传递给主构造函数后,我没有显示它(通过 main.show)。 现在我已经插入它,它并不能说服我。有更清洁的方法吗? 哦不,有问题。使用 main.show 会创建一个额外的窗口!

【问题讨论】:

  • 分享一些代码,看看你已经尝试了什么。
  • 我尝试插入一个新的构造函数(在主窗体中),它在输入中接受“字符串路径”,以便在管理拖放的函数中(在页面中)和路径的推断,我记得主窗体将路径传递给它,但它不起作用。
  • @Babbillumpa 完成!
  • 我该如何解决?我可以使用什么活动?不幸的是,我最近才开始使用这种形式,而且我不是很有经验。

标签: c# wpf


【解决方案1】:

我开始说有很多方法可以实现您想要的。我看到的第一个问题(即使您没有发布项目的 XAML 部分)是您显示 MainWindow 两次:第一次显示时,第二次在页面内拖动文件时。

一个想法可能是将 Csv 对象传递给页面:

public CSV csv = new CSV();
public MainWindow()
{
    InitializeComponent();
    Main.Content = new LoadCSVPage(csv);
}

public partial class LoadCSVPage: Page
{
    private CSV _csv;

    public LoadCSVPage(CSV mainCsv)
    {
        InitializeComponent();
        _csv = mainCsv;
    }
    private void LoadCSV_DragEnter(object sender, DragEventArgs e)
    {
        string filePath = "";
        string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
        //foreach (string file in files)
        //{
            //This also is not really clear: what happen if you drag more then one file? 
            //This way you are cycling for each file, but you are selecting the last` 
            //filePath = file;
        //}
       if(files.Length > 0)
       {
           filePath = files.Last();
       }
       // Here the csv object can obtain the filePath
       _csv.SetLocation(filePath);

    }
}

然后你可以直接从页面的方法中传递路径。

【讨论】:

  • LoadCSV 构造函数给了我错误:CSV 参数类型比 LoadCSV 方法更难访问
  • 返回相同的错误...我认为是因为该类是“公共部分”...我该如何解决?
  • 如果我在 MainWindow 中定义公共 CSV,错误类似:CSV 字段类型比 MainWindow.cs 字段更难访问
  • 但是,这是一个访问问题,这样我的代码就可以了。我认为问题在于 CSV 类。是公开的吗?或者它有命名空间或受保护的可见性?尝试发布类 CSV 的定义。
  • 你是对的!我忘记在类中添加 public 修饰符。现在我试试你的解决方案,我会告诉你的,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2015-02-21
相关资源
最近更新 更多